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" なステートメント
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
を追加すると、私は "グローバルI" なステートメント
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
をコメントアウト
は、誰もがこれを説明していただけますか?
はなぜ '全く必要nonlocal'で約
nonlocal
詳細情報?あなたの例でも、これは単なるクロージャです。つまり、内部関数は外部関数で定義された変数にアクセスできます。 –
EDIT:参照エラーを引き起こす行は 'i + = 1'ですが、反復呼び出しでも' i'は決して増加しませんし、 'i'でもクロージャのスコープでアクセスできます。 –
@Vincenzzzochi "I"の値が増分され、非ローカルを使用すると完全に機能します。 – n33rma