関数から関数を呼び出す - python 関数内関数 利点




Pythonのローカル関数 (2)

変数を引数としてバインドしてみてください。

def outer():
    a = 0
    def inner(a=a):
        a += 1

    inner()

outer()

私は適切な文書を掘り下げようとします。

編集

内部関数が外部スコープに副作用を持たせたいので、リストのような可変データ型を使う必要があります。 整数と文字列は不変です。

def outer():
    a = [0]
    def inner():
        a[0] += 1
    inner()
    print a[0]
outer()

次のPythonコードでは、 UnboundLocalErrorを取得しUnboundLocalError 。 私が理解しているように、ローカル関数は包含関数のローカル変数を共有しますが、ここではほとんどそうではありません。 この文脈では、 aは不変の値でaと認識してaますが、それは問題ではありません。

def outer():
    a = 0
    def inner():
        a += 1
    inner()
outer()

aの値が可変型でラップされている場合、 UnboundLocalError例外をUnboundLocalErrorないので、内部関数は親関数内のすべての参照のコピーを受け取ったように見えます。

誰かがここでその振る舞いを明確にすることができ、これに関する適切なPythonドキュメントを教えてくれますか?


変数を非ローカルとして指定してクロージャの状態を保持する必要があります。したがって、定義は次のようにする必要があります

def outer():
a = 0
def inner():
    nonlocal a
    a += 1
inner()




local