我試圖做大意如下的python3東西:Python的嵌套函數變量賦值
i = 1337
def g():
print(i)
i = 42
g()
但出現以下錯誤
UnboundLocalError: local variable 'i' referenced before assignment
我想我明白了錯誤信息的手段,但爲什麼會這樣呢?有什麼辦法可以繞過這個嗎?
我試圖做大意如下的python3東西:Python的嵌套函數變量賦值
i = 1337
def g():
print(i)
i = 42
g()
但出現以下錯誤
UnboundLocalError: local variable 'i' referenced before assignment
我想我明白了錯誤信息的手段,但爲什麼會這樣呢?有什麼辦法可以繞過這個嗎?
用兩個詞 - 給定的變量名未在函數中賦值時,將查找對該變量的引用。使用全局 - 在這種情況下,蟒蛇會尋找我在全球範圍內:
i = 1337
def g():
global i
print i
i = 42
g()
你可以閱讀更多的variable scopes in PEP-0227
如果你真的想這樣做的,你需要讓我脫離全球範圍。
def g():
global i
print i
i = 42
但是,通常你會更好地改變你的代碼如何工作而不需要全局變量。根據你如何使用它,這可能就像傳入i作爲參數一樣簡單,並返回更改後的值。
在我作爲參數傳遞的Keeyai的建議的一個例子:
i = 1337
def g(i):
print(i)
i = 42
g(i)
但是,你千萬不要用我的新的價值,所以也許這樣的事情更有意義:
def g (i):
i = 42
return i
i = 1337
print g(i)
請參閱http://stackoverflow.com/q/370357/875127 – 2013-04-09 03:42:32