当后面的if子句存在时,python中的全局变量不会被引用
我试图理解以下代码失败的原因,即无法识别全局变量:当后面的if子句存在时,python中的全局变量不会被引用,python,global-variables,Python,Global Variables,我试图理解以下代码失败的原因,即无法识别全局变量: 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 "globa
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
$python3 globals-test2.py
4.
回溯(最近一次呼叫最后一次):
文件“globals-test2.py”,第12行,在
()
文件“globals-test2.py”,第10行,在
b()
文件“globals-test2.py”,第4行,在b中
打印(xy)
UnboundLocalError:赋值前引用的局部变量“xy”
为什么函数b中不识别全局xy
删除函数b中的if子句会使错误消失
谢谢。代码的问题是该变量不是全局变量。如果要在这些函数中使用它们,则必须将它们作为参数传入,或者在函数类型的开头传递
global xy
这将使变量在函数中成为全局变量因为您在函数中使用它,所以通过在函数顶部添加
global xy
来声明它为全局变量
xy=4
def b():
全局xy
打印(xy)
如果xy为无:
xy=2
定义a():
打印(xy)
b()
()
这是Python中众所周知的一个问题。在函数中指定给的任何变量都是整个函数的局部变量。如果你想要外部xy,你必须说
全局xy
在函数中
注意,“分配给”,我的字面意思是
xy=
。如果您编写xy[0]=value
或xy.foo=value
,那么xy
仍然可以是一个全局变量,而不声明它是全局变量。这个问题已经回答了很多次。您可以转到搜索栏并粘贴错误“UnboundLocalError:赋值前引用的局部变量'xy',如果链接的副本不够,则可以获得许多高质量的答案。我知道我可以在b()中声明全局变量;但令人惊讶的是,当函数b()中的if子句不存在时,xy被认为是全局的;但是当if子句出现时,xy被认为是本地的;我理解if条款中的分配是造成差异的原因。令人惊讶的是,当函数b()中的if子句不存在时,xy被认为是全局的;但是当if子句存在时,xy被认为是局部的。重要的是xy=..
出现在函数的某个地方。它是否被实际执行并不重要。