2013-04-09 120 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)