【发布时间】:2017-03-03 16:37:50
【问题描述】:
此代码给出“未绑定错误”(在此查询中讨论 Python variable scope error)
x=3
def f():
print x
x+=3
这样做的原因(如答案中所示)是,一旦使用赋值运算符,'x' 就成为局部变量,并且由于 'x' 没有附加值,因此无法将其增加 3。 但是看看这段代码
x=3
def f():
print x
x=3
这一次,'x' 似乎没有值,因此不应该有任何问题,但同样的错误发生了。
UnboundLocalError: local variable 'x' referenced before assignment
如果python在读取语句'x=3'后已经创建了一个局部变量'x',那为什么它不打印'x'?
这里还值得注意的是,这段代码不会产生错误
x=3
def f():
print x
x
输出为 '3'(当 f() 被调用时)
这让我很困惑,这次是不是在 'f()' 中声明了太多 'x' 那么 python 不应该将这个 'x' 添加到它的局部变量列表中吗?
【问题讨论】:
-
Python 编译你在函数中使用的变量名列表。这里将使用
x,因此它已经为它“保留”了空间,但它没有被分配。