全局变量如何在Python中运行?我知道全局变量是邪恶的,我只是在试验。
这在python中不起作用:
G = None
def foo():
if G is None:
G = 1
foo()
我收到错误:
UnboundLocalError: local variable 'G' referenced before assignment
我做错了什么?
答案 0 :(得分:62)
您需要global
声明:
def foo():
global G
if G is None:
G = 1
在Python中,默认情况下,您分配给的变量将成为局部变量。您需要使用global
将它们声明为全局变量。另一方面,您引用但未分配给的变量不会自动成为局部变量。这些变量引用封闭范围中最接近的变量。
Python 3.x引入了nonlocal
语句,类似于global
,但将变量绑定到最近的封闭范围。例如:
def foo():
x = 5
def bar():
nonlocal x
x = x * 2
bar()
return x
此函数在调用时返回10.
答案 1 :(得分:9)
您需要将G
声明为global
,但是为什么:每当您在函数内部引用变量时,如果在该函数中的任何位置设置变量,Python假定它是一个局部变量。因此,如果代码中的该点不存在该名称的局部变量,您将获得UnboundLocalError
。如果你真的想要引用一个全局变量,就像你的问题一样,你需要global
关键字来告诉Python你的意思。
如果您没有在函数中的任何位置分配变量,但只访问其值,Python将使用该名称的全局变量(如果存在)。所以你可以这样做:
G = None
def foo():
if G is None:
print G
foo()
此代码打印None
并且不会抛出UnboundLocalError。
答案 2 :(得分:7)
你仍然必须在该函数中声明G为全局:
G = None
def foo():
global G
if G is None:
G = 1
foo()
print G
只输出
1
答案 3 :(得分:2)
在函数中将G定义为全局:
#!/usr/bin/python
G = None;
def foo():
global G
if G is None:
G = 1;
print G;
foo();
上面的python打印1
。
使用像这样的全局变量是不好的做法,因为:http://c2.com/cgi/wiki?GlobalVariablesAreBad