我想了解Python範圍。看到這個例子:Python本地範圍混亂
x = 'foo'
def outer(p):
print x
x = 'bar'
def inner(p):
print x
inner(1)
print x
outer(1)
該代碼產生以下錯誤:
Traceback (most recent call last):
File "scopes2.py", line 11, in <module>
outer(1)
File "scopes2.py", line 4, in outer
print x
UnboundLocalError: local variable 'x' referenced before assignment
現在,如果我刪除x = 'bar'
線,然後將其運行正常。
爲什麼我不能使用全球x
從print x
在outer()
直到我重新綁定到'bar'
?
這是否意味着解釋器不會在執行過程中逐行處理代碼呢?我試圖在'outer()'函數中加入if 1:pass'' else:x ='bar'\ ndo_error'。雖然執行永遠不會到達else分支,但它仍然抱怨未定義的局部變量。另一方面,它完全沒有抱怨未定義的'do_error',並且如果我刪除了該作業,則完美運行。 – Mkoch
是的,解釋器評估整個函數來確定全局和本地 – mhlester
如果'locals()'也不包含在'x ='bar''行之前的名字'x',是否有方法來「查找」它在那個時候?我的意思是要找到這樣一個名字可能在這個區塊中被綁定? – Mkoch