【问题标题】:Why Python list doesn't have scope limitation (while integer has)? [duplicate]为什么 Python 列表没有范围限制(而整数有)? [复制]
【发布时间】:2019-12-19 11:09:13
【问题描述】:

我的意思是,对于一个整数:

>>> a = 2
>>> def b():
...     a += 1
...
>>> b()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in b
UnboundLocalError: local variable 'a' referenced before assignment

while 对于列表(或者说对于列表元素):

>>> a = [0]
>>> def b():
...     a[0] += 1
...
>>> b()
>>> a[0]
1

【问题讨论】:

  • 他们有完全相同的限制,如果你做了类似的操作,你会看到:a += [1]

标签: python list scope int


【解决方案1】:

int 的示例中,Python 试图在函数b() 中为a 赋值,因此它将a 标识为函数中的“局部”变量。而且由于变量a尚未定义,解释器会抛出错误。

list 的示例中,Python 没有尝试将任何内容分配给a,因此解释器将其识别为“全局”变量。是的,它正在修改列表中的值,但是对名为a 的列表对象的引用没有改变。

【讨论】:

  • 感谢您的回答!那么是不是因为整数不是一个对象,所以 python 不能引用它,因此我们不能只增加它?那么python中的整数是什么?只是称为值类型或?
  • @BillyChen 不,这根本不是原因。整数也是对象。
  • 抱歉造成混淆,第一个示例不起作用的唯一原因是您重新定义了a。我已经清理了我的答案以防止任何混淆。 Python 中的一切都是对象。 :P
  • 知道了。感谢@jonrsharpe 和 Xteven,我将继续学习以了解更多信息!
猜你喜欢
  • 2017-08-02
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2021-10-15
  • 2019-03-14
  • 2018-10-17
  • 2017-05-22
相关资源
最近更新 更多