1

次のコードは意図したとおりに機能します。

def f():
    def g():
        print(a)
    a = 42
    return g
f()()

gaその閉鎖からロードし、すべてが順調です。

現在、このスニペットは で恐ろしく失敗しUnboundLocalErrorます。

def f():
    def g():
        print(a)
        a = 43
    a = 42
    return g
f()()

を見るとdis、最初のコードは呼び出しますがLOAD_CLOSURE、2 番目のコードは呼び出しません。これを考慮すると、エラーが発生する理由は明らかです。ただし、問題は次のとおりです。

pythonは、クロージャまたはローカルスコープから変数をいつ描画するかをどのように知っていますか? print(a)(それが先行することを考慮してa = 43。)

この決定はコンパイル時に行われますか? print(a)(まあ、それが先行することを考えると、そのように見えますa = 43

この投稿は、nonlocalまたはglobalキーワードに関するものではありません。

4

1 に答える 1