0

次の例を検討してください。

def g():

    in_g=100

    def f1():
        nonlocal in_g
        in_g = 10

    def f2():
        nonlocal in_g
        print(in_g)

    return (f1,f2)


(f1, f2) = g()

f2() #prints 100
f1()
f2() #prints 10

内部関数 と の両方がf1f2「クロージャー」内で変数 にアクセスしますin_g。しかし、帰国後、記憶のgどこに保管されているのでしょうか。in_g

gwhile の実行中in_gは、 への呼び出しに対応するスタック フレーム上の変数であると仮定しgます。したがって、変数 を使用するとgf1f2はすべて (スタック上の) 同じメモリ位置にアクセスしますin_g

しかし、例に見られるように、gリターンの後、 を参照するときに同じメモリ位置にアクセスしf1ます。ただし、返されたので、そのメモリの場所をスタックに置くことはできません。f2in_gg

4

2 に答える 2