0
我想在Python3.4中運行以下代碼,但出現錯誤。如何在函數內部訪問函數中的變量
def checknumner():
i = 0
print("checknumber called...")
def is_even():
print("is_even called...")
global i
if i % 2 == 0:
print("Even: ", i)
else:
print("Odd: ", i)
i += 1
return is_even
c = checknumner()
print(c())
print(c())
print(c())
我無法在子函數中訪問變量「i」。
當我註釋掉 「全局I」 statment
D:\Study\Python>python generator_without_generator.py checknumber called... is_even called... Traceback (most recent call last): File "generator_without_generator.py", line 24, in <module>
print(c()) File "generator_without_generator.py", line 16, in is_even
if i % 2 == 0: UnboundLocalError: local variable 'i' referenced before assignment
當我添加 「全局I」 statment
D:\Study\Python>python generator_without_generator.py checknumber called... is_even called... Traceback (most recent call last): File "generator_without_generator.py", line 24, in <module>
print(c()) File "generator_without_generator.py", line 16, in is_even
if i % 2 == 0: NameError: name 'i' is not defined
誰能請解釋一下嗎?
爲什麼'nonlocal'在所有必要的嗎?即使在你的例子中,這只是一個閉包,意味着內函數_has_訪問外函數中定義的變量。 –
編輯:這是導致引用錯誤的'i + = 1'行,但無論如何,即使對於給定的代碼重複調用,'i'也永遠不會增加,'i'仍然可以通過閉包的範圍訪問。 –
@Vincenzzzochi「我」的價值遞增和使用非地方它完美的作品。 – n33rma