为什么可以';我不能在Python中设置一个全局变量吗?
全局变量在Python中是如何工作的?我知道全局变量是邪恶的,我只是在试验 这在python中不起作用:为什么可以';我不能在Python中设置一个全局变量吗?,python,global-variables,Python,Global Variables,全局变量在Python中是如何工作的?我知道全局变量是邪恶的,我只是在试验 这在python中不起作用: G = None def foo(): if G is None: G = 1 foo() 我得到一个错误: UnboundLocalError: local variable 'G' referenced before assignment 我做错了什么?你需要声明: def foo(): global G if G is None:
G = None
def foo():
if G is None:
G = 1
foo()
我得到一个错误:
UnboundLocalError: local variable 'G' referenced before assignment
我做错了什么?你需要声明:
def foo():
global G
if G is None:
G = 1
在Python中,默认情况下指定为局部变量的变量。您需要使用global
将它们声明为全局变量。另一方面,引用但未指定的变量不会自动成为局部变量。这些变量指的是封闭范围内最近的变量
Python3.x引入了类似于global
的语句,但将变量绑定到其最近的封闭范围。例如:
def foo():
x = 5
def bar():
nonlocal x
x = x * 2
bar()
return x
调用此函数时返回10。您仍然必须从该函数中将G声明为全局:
G = None
def foo():
global G
if G is None:
G = 1
foo()
print G
它只是输出
1
在函数中将G定义为全局,如下所示:
#!/usr/bin/python
G = None;
def foo():
global G
if G is None:
G = 1;
print G;
foo();
上面的python打印1
像这样使用全局变量是不好的做法,因为:您需要将
G
声明为global
,但至于原因:每当您在函数中引用变量时,如果您在该函数的任何位置设置该变量,Python都会假定它是局部变量。因此,如果该名称的局部变量在代码中的该点不存在,您将得到UnboundLocalError
。如果你真的想引用一个全局变量,就像你的问题中那样,你需要global
关键字来告诉Python这就是你的意思
如果不在函数中的任何位置分配变量,而只访问其值,Python将使用该名称的全局变量(如果存在)。所以你可以做:
G = None
def foo():
if G is None:
print G
foo()
此代码打印
None
,并且不会抛出UnboundLocalError。s/variables/names/gs/assign to/bind to/gYes,可以使用不同的术语,但只要Python本身在错误消息中谈到“variables”和“assignment”(如原始问题所示),我认为在解释这个问题时,这样的术语是完全可以接受的!语言参考在这件事上也不总是一致的