在Python中,全局变量是如何工作的?我知道全局变量是邪恶的,我只是在做实验。
这在python中不起作用:
G = None
def foo():
if G is None:
G = 1
foo()我得到一个错误:
UnboundLocalError: local variable 'G' referenced before assignment我做错了什么?
发布于 2009-08-15 04:50:58
您需要global语句:
def foo():
global G
if G is None:
G = 1在Python中,默认情况下指定为局部变量的变量。您需要使用global将它们声明为全局变量。另一方面,引用但未赋值的变量不会自动成为局部变量。这些变量引用封闭作用域中最接近的变量。
Python3.x引入了类似于global的nonlocal语句,但将变量绑定到其最近的封闭作用域。例如:
def foo():
x = 5
def bar():
nonlocal x
x = x * 2
bar()
return x此函数在被调用时返回10。
发布于 2009-08-15 04:51:33
您仍然需要在该函数中将G声明为全局:
G = None
def foo():
global G
if G is None:
G = 1
foo()
print G它只是简单地输出
1发布于 2009-08-15 05:04:52
您需要将G声明为global,但原因是:每当您在函数中引用变量时,如果您在该函数中的任何位置设置该变量,Python都会假设它是一个局部变量。因此,如果该名称的局部变量在代码中不存在,您将获得UnboundLocalError。如果您实际上想要引用一个全局变量,那么您需要global关键字来告诉Python这就是您想要的。
如果您没有在函数中的任何位置为变量赋值,而只是访问它的值,那么Python将使用该名称的全局变量(如果存在)。所以你可以这样做:
G = None
def foo():
if G is None:
print G
foo()这段代码打印None,并且不抛出UnboundLocalError。
https://stackoverflow.com/questions/1281184
复制相似问题