我试图理解为什么以下代码失败,而不识别全局变量:
xy = 4
def b():
print(xy)
if xy is None:
xy = 2
def a():
print(xy)
b()
a()在运行时,我得到了输出:
$ python3 globals-test2.py
4
Traceback (most recent call last):
File "globals-test2.py", line 12, in <module>
a()
File "globals-test2.py", line 10, in a
b()
File "globals-test2.py", line 4, in b
print(xy)
UnboundLocalError: local variable 'xy' referenced before assignment为什么功能b中不承认全局xy?
删除函数b中的if子句将使错误消失。
谢谢。
发布于 2020-11-05 17:38:12
这是Python中一个众所周知的问题。在函数中赋值的任何变量都是整个函数的本地变量。如果你想要外部xy,你必须说
global xy
在功能上。
请注意,我所说的“赋值”是指xy = <value>。如果您编写了xy[0] = value或xy.foo = value,那么xy仍然可以是全局的,而不需要声明它。
发布于 2020-11-05 17:37:49
代码的问题是,变量不是全局变量。如果要在这些函数中使用它们,则必须将它们作为参数传递,或者在函数类型的开头传递它们。
global xy这将使变量在函数中具有全局性。
发布于 2020-11-05 17:37:50
因为在函数中使用它,所以通过在函数顶部添加global xy来声明它为全局变量。
xy = 4
def b():
global xy
print(xy)
if xy is None:
xy = 2
def a():
print(xy)
b()
a()https://stackoverflow.com/questions/64702379
复制相似问题