【发布时间】:2013-03-31 08:19:54
【问题描述】:
我正在尝试在 python3 中按照以下几行做一些事情:
i = 1337
def g():
print(i)
i = 42
g()
但出现以下错误
UnboundLocalError: local variable 'i' referenced before assignment
我想我理解错误消息的含义,但为什么会这样?有什么办法可以规避吗?
【问题讨论】:
标签: python
我正在尝试在 python3 中按照以下几行做一些事情:
i = 1337
def g():
print(i)
i = 42
g()
但出现以下错误
UnboundLocalError: local variable 'i' referenced before assignment
我想我理解错误消息的含义,但为什么会这样?有什么办法可以规避吗?
【问题讨论】:
标签: python
简而言之 - 当给定的变量名称未在函数中分配值时,将查找对该变量的引用。使用 global - 在这种情况下,python 将在全局范围内查找 i:
i = 1337
def g():
global i
print i
i = 42
g()
您可以在variable scopes in 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)
【讨论】: