次のコードは意図したとおりに機能します。
def f():
def g():
print(a)
a = 42
return g
f()()
g
a
その閉鎖からロードし、すべてが順調です。
現在、このスニペットは で恐ろしく失敗し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
キーワードに関するものではありません。