0

我试图在 python3 中按照以下几行做一些事情:

i = 1337
def g():
    print(i)
    i = 42
g()

但得到以下错误

UnboundLocalError: local variable 'i' referenced before assignment

我想我理解错误消息的含义,但为什么会这样呢?有什么办法可以规避这种情况吗?

4

3 回答 3

5

简而言之 - 当给定的变量名称未在函数中分配值时,将查找对该变量的引用。使用 global - 在这种情况下,python 将在全局范围内查找 i :

i = 1337

def g():
    global i
    print i
    i = 42

g()

您可以在 PEP-0227中阅读有关变量范围的更多信息

于 2013-04-09T03:42:29.697 回答
1

如果你真的想这样做,你需要从全局范围中获取 i 。

def g():
    global i
    print i
    i = 42

但是,通常您最好将代码的工作方式更改为不需要全局变量。根据您使用它的方式,这可能就像传入 i 作为参数并返回更改后的值一样简单。

于 2013-04-09T03:44:48.000 回答
0

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)
于 2013-04-09T04:39:18.137 回答