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


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

通常發現,在 Python 函式中儲存區域性變數比儲存全域性變數更快。這可以透過以下方式解釋。

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

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

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

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

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

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

更新於: 2019年7月30日

367 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.