>>> import sys
>>> print(sys.version)
2.4.4
>>> b = 11
>>> def foo2():
... a = b
... print a, b
...
>>> foo2()
11 11
>>> def foo3():
... a = b
... b = 12
... print a, b
...
>>> foo3()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo3
UnboundLocalError: local variable 'b' referenced before assignment
>>> def foo4():
... global b
... a = b
... b = 12
... print a, b
...
>>> foo4()
11 12
问题&GT;在foo3
中,为什么你可以访问全局变量而不声明它但你仍然无法修改它。
答案 0 :(得分:4)
如果没有global
声明,Python编译器会扫描每个函数的整个代码,以查看在函数代码中分配给的变量。在foo3()
中,您分配给a
和b
,因此它们都被视为函数中的局部变量。
当方法代码执行时,在您执行a = b
时,b
还没有值(因为您没有为其分配任何内容)。因此,您获得UnboundLocalError
。
这样做是为了在函数总是中使用变量引用相同的位置,即使尚未为其分配任何内容。
答案 1 :(得分:3)
意外地踩踏全局变量是错误的常见原因。因此,在修改变量global
之前声明它是有意义的。
必须始终声明非局部变量global
是一件痛苦的事。因此,如果你所做的只是阅读它,你就可以使用全局变量。但是,如果您要在函数中的任何位置修改x,则必须在使用它任何之前将其声明为全局。