全局变量如何在Python中运行?我知道全局变量是邪恶的,我只是在尝试.
这在python中不起作用:
G = None
def foo():
if G is None:
G = 1
foo()
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
UnboundLocalError: local variable 'G' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Gre*_*ill 63
你需要global声明:
def foo():
global G
if G is None:
G = 1
Run Code Online (Sandbox Code Playgroud)
在Python中,默认情况下,您指定的变量将成为局部变量.您需要使用global它们将它们声明为全局变量.另一方面,您引用但未分配的变量不会自动成为局部变量.这些变量引用封闭范围中最近的变量.
Python 3.x引入了nonlocal类似的语句global,但将变量绑定到最近的封闭范围.例如:
def foo():
x = 5
def bar():
nonlocal x
x = x * 2
bar()
return x
Run Code Online (Sandbox Code Playgroud)
调用时,此函数返回10.
你需要声明Gas global,但是为什么:每当你在函数内部引用变量时,如果你在该函数中的任何地方设置变量,Python就假定它是一个局部变量.因此,如果代码中的那个点上不存在该名称的局部变量,那么您将得到UnboundLocalError.如果你真的想要引用一个全局变量,就像你的问题一样,你需要global关键字来告诉Python你的意思.
如果您没有在函数中的任何位置分配变量,而只访问其值,Python将使用该名称的全局变量(如果存在).所以你可以这样做:
G = None
def foo():
if G is None:
print G
foo()
Run Code Online (Sandbox Code Playgroud)
此代码打印None并不会抛出UnboundLocalError.
您仍然必须在该函数中将G声明为全局:
G = None
def foo():
global G
if G is None:
G = 1
foo()
print G
Run Code Online (Sandbox Code Playgroud)
这只是输出
1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46726 次 |
| 最近记录: |