python 中的全局变量在稍后出现 if 子句时未被引用
Global variables in python not referenced when later if clause is present
我试图理解为什么以下代码失败,无法识别全局变量:
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 子句会使错误消失。
谢谢。
您的代码存在的问题是该变量不是全局变量。如果你想在这些函数中使用它们,你必须将它们作为参数传递或在函数类型的开头传递
global xy
这将使函数中的变量成为全局变量
由于您在函数中使用它,因此通过在函数顶部添加 global xy
将其声明为全局变量。
xy = 4
def b():
global xy
print(xy)
if xy is None:
xy = 2
def a():
print(xy)
b()
a()
这是 Python 中的一个 well-known 问题。在函数中赋值的任何变量对于整个函数都是局部的。如果你想要外面的xy,你必须说
global xy
在函数中。
请注意,“分配给”是指 xy = <value>
。如果你写 xy[0] = value
或 xy.foo = value
,那么 xy
仍然可以是一个全局变量而不用声明它。
我试图理解为什么以下代码失败,无法识别全局变量:
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 子句会使错误消失。
谢谢。
您的代码存在的问题是该变量不是全局变量。如果你想在这些函数中使用它们,你必须将它们作为参数传递或在函数类型的开头传递
global xy
这将使函数中的变量成为全局变量
由于您在函数中使用它,因此通过在函数顶部添加 global xy
将其声明为全局变量。
xy = 4
def b():
global xy
print(xy)
if xy is None:
xy = 2
def a():
print(xy)
b()
a()
这是 Python 中的一个 well-known 问题。在函数中赋值的任何变量对于整个函数都是局部的。如果你想要外面的xy,你必须说
global xy
在函数中。
请注意,“分配给”是指 xy = <value>
。如果你写 xy[0] = value
或 xy.foo = value
,那么 xy
仍然可以是一个全局变量而不用声明它。