我已閱讀以下文章,但我仍然不確定。瞭解Python如何「編譯」或「解釋」函數對象
如果我有包含以下代碼一個Python文件myfunctions.py。
x = 3
def f():
print x
x = 2
然後,說$ python myfunctions.py
運行非常好。 但是現在對上述文件做一個小改動。新文件如下所示。
x = 3
def f():
print x
x = 2
f() # there is a function call now
這一次,代碼給出了一個錯誤。現在,我正試圖理解這種行爲。到目前爲止,這些都是我的結論。
- 的Python創建
x=3
- 字節碼它創建了一個函數對象樓快速掃描並具有字節碼談到了局部變量F公司範圍內,但注意,Python中的所有語句的字節碼是不可能一直建。
- 現在,Python遇到一個函數調用,它知道這個函數調用是合法的,因爲只有最低字節碼談論函數對象f及其局部變量。
- 現在解釋採取負責執行的字節碼,但是從最初的足跡它知道x是一個局部變量這裏說 - 「你爲什麼分配之前您在打印」
可有人請對此有何評論?提前致謝。對不起,如果這已被解決。
我認爲額外的縮進不在你的實際文件中,並且該異常是'UnboundLocalError'? – mgilson
什麼是錯誤?在第二個例子中,縮進應該在「def」行中被打破嗎? – tripleee
我得到的錯誤(固定縮進之後)是'UnboundLocalError:本地變量'x'在作業之前引用了' –