我试图在 python3 中按照以下几行做一些事情:
i = 1337
def g():
print(i)
i = 42
g()
但得到以下错误
UnboundLocalError: local variable 'i' referenced before assignment
我想我理解错误消息的含义,但为什么会这样呢?有什么办法可以规避这种情况吗?
我试图在 python3 中按照以下几行做一些事情:
i = 1337
def g():
print(i)
i = 42
g()
但得到以下错误
UnboundLocalError: local variable 'i' referenced before assignment
我想我理解错误消息的含义,但为什么会这样呢?有什么办法可以规避这种情况吗?
简而言之 - 当给定的变量名称未在函数中分配值时,将查找对该变量的引用。使用 global - 在这种情况下,python 将在全局范围内查找 i :
i = 1337
def g():
global i
print i
i = 42
g()
您可以在 PEP-0227中阅读有关变量范围的更多信息
如果你真的想这样做,你需要从全局范围中获取 i 。
def g():
global i
print i
i = 42
但是,通常您最好将代码的工作方式更改为不需要全局变量。根据您使用它的方式,这可能就像传入 i 作为参数并返回更改后的值一样简单。
Keeyai 建议将 i 作为参数传入的示例:
i = 1337
def g(i):
print(i)
i = 42
g(i)
但是,您永远不会使用 i 的新值,所以也许这样的事情更有意义:
def g (i):
i = 42
return i
i = 1337
print g(i)