Python嵌套函数变量赋值

时间:2013-04-09 03:39:03

标签: python

我正在尝试在python3中执行以下操作:

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

但是收到以下错误

UnboundLocalError: local variable 'i' referenced before assignment

我想我理解错误信息的含义,但为什么会这样呢?有没有办法绕过这个?

3 个答案:

答案 0 :(得分:5)

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

i = 1337

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

g()

您可以在variable scopes in PEP-0227

上阅读更多内容

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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)