1
下面的代碼按預期工作:Python的封鎖和變量查找
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
和第二個沒有。考慮到這一點,很明顯爲什麼會出現錯誤。然而,問題是這樣的:
python如何知道何時從閉包或從本地作用域中繪製變量? (考慮到print(a)
在a = 43
之前。)
這個決定是否在編譯時進行? (嗯,好像是,考慮到print(a)
先a = 43
)
這篇文章不是關於nonlocal
或global
關鍵字。
是的,這只是一個簡單的靜態檢查。 – Claudiu
這是否意味着,在編譯期間,編譯器會跟蹤(A)訪問哪些變量,以及(B)哪些變量被分配到每個範圍中,並且如果(A)中有元素不在(B)中,它會升級查找? – Hyperboreus
是的,很多。 – user2357112