Python嵌套函数变量赋值

Python Nested Function Variable Assignment

本问题已经有最佳答案,请猛点这里访问。

我正试图在python3中沿着以下几行做一些事情:

1
2
3
4
5
i = 1337
def g():
    print(i)
    i = 42
g()

但得到以下错误

1
UnboundLocalError: local variable 'i' referenced before assignment

我想我理解错误消息的含义,但为什么会这样呢?有什么办法可以绕过这个问题吗?


两个字-当一个给定的变量名没有在一个函数中分配一个值时,将查找对该变量的引用。使用全局-在这种情况下,python将在全局范围内查找i:

1
2
3
4
5
6
7
8
i = 1337

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

g()

您可以在PEP-0227中阅读更多关于变量范围的内容。


如果你真的想这样做,你需要从全球范围内得到我。

1
2
3
4
def g():
    global i
    print i
    i = 42

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


Keeyai建议将i作为参数传入的示例:

1
2
3
4
5
i = 1337
def g(i):
    print(i)
    i = 42
g(i)

然而,你从来没有使用过我的新价值,所以像这样的事情可能更有意义:

1
2
3
4
5
6
def g (i):
    i = 42
    return i

i = 1337
print g(i)