Pythonのnonlocal文
外部関数内に変数があり、内部関数からアクセスする必要がある場合があります。
関数outer内に変数iを宣言しましょう。
内部関数に対するこの変数は外部変数となります(グローバル変数とは外部のコードでのみ宣言された変数です)。
そして関数innerにiへの1の加算を設定します:
def outer():
i = 0
def inner():
i += 1 # [4, 9, 25]を出力します
inner()
return i
しかし、innerにとって変数iはローカル変数であり、Pythonはそれを未宣言と見なして対応するエラーを出力します。
以前は、このようなエラーはglobal文で修正されていました。
しかし、ここではiは外部変数なので、nonlocal文を使用すべきです。
これは、リストされた変数名をグローバルを除く最も近いスコープから取得します。つまり、inner内部のiはこの関数の上位で宣言された変数から取得されます:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # 1を出力します
次のコードで、あるプログラマーが誤りを犯しました:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
このコードのどこが間違っていますか?コード作者の誤りを見つけて修正してください。
次のコードで、あるプログラマーが誤りを犯しました:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
このコードのどこが間違っていますか?コード作者の誤りを見つけて修正してください。