2013-04-09 115 views
0

我试图做大意如下的python3东西:Python的嵌套函数变量赋值

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

但出现以下错误

UnboundLocalError: local variable 'i' referenced before assignment 

我想我明白了错误信息的手段,但为什么会这样呢?有什么办法可以绕过这个吗?

+0

请参阅http://stackoverflow.com/q/370357/875127 – 2013-04-09 03:42:32

回答

5

用两个词 - 给定的变量名未在函数中赋值时,将查找对该变量的引用。使用全局 - 在这种情况下,蟒蛇会寻找我在全球范围内:

i = 1337 

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

g() 

你可以阅读更多的variable scopes in PEP-0227

1

如果你真的想这样做的,你需要让我脱离全球范围。

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

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

0

在我作为参数传递的Keeyai的建议的一个例子:

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

但是,你千万不要用我的新的价值,所以也许这样的事情更有意义:

def g (i): 
    i = 42 
    return i 

i = 1337 
print g(i)