>>> 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
问题> 在foo3
中,为什么你可以访问全局变量而不声明它,但你仍然不能修改它。
最佳答案
如果没有 global
声明,Python 编译器会扫描每个函数的整个代码,以查看函数代码中分配给 的变量。在 foo3()
中,您同时为 a
和 b
赋值,因此它们都被视为函数内的局部变量。
当方法代码执行时,在你执行a = b
的时候,b
还没有值(因为你还没有给它赋值) .因此,您会得到一个 UnboundLocalError
。
这样做是为了在函数中使用变量总是引用相同的位置,即使还没有分配给它。
关于python - 为什么您可以读取但不能修改全局值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9447189/