為什麼Python程式碼在函式中執行速度更快?


我們發現,如果Python程式碼正常執行,然後在Python函式中執行,則後者執行速度更快。我想知道為什麼Python程式碼在函式中執行速度更快。

通常情況下,在Python函式中儲存區域性變數比全域性變數更快。這可以用以下方式解釋。

除了區域性/全域性變數儲存時間外,操作碼預測使函式執行速度更快。

CPython 是我們從 Python.org 下載的原始 Python 實現。之所以稱為 CPython,是為了將其與後來的 Python 實現區分開來,並將其與 Python 程式語言本身區分開來。

CPython 恰好是用 C 語言實現的。CPython 將我們的 Python 程式碼編譯成位元組碼,並在評估迴圈中解釋該位元組碼。

編譯函式時,區域性變數儲存在固定大小的陣列中(而不是字典中),並且變數名分配給索引。這是可能的,因為你無法動態地向函式新增區域性變數。然後,檢索區域性變數實際上是在列表中進行指標查詢,並在 PyObject 上增加引用計數,這是微不足道的。

將其與全域性查詢進行比較,全域性查詢是涉及雜湊等的真正的字典搜尋。順便說一句,這就是為什麼如果你想要一個全域性變數,你需要指定 global:如果你曾經在作用域內為一個變數賦值,除非你告訴它不要這樣做,否則編譯器將為它的訪問發出 STORE_FAST 指令。

順便說一句,全域性查詢仍然得到了很好的最佳化。屬性查詢才是真正慢的!

更新於:2019年7月30日

366 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.