為什麼 Python 程式碼在 function 裡執行較快?
覺得我們的內容實用嗎? MyApollo 電子報讀者募集中!歡迎訂閱電子報!
原本我以為這只是單純因為 Python 需要搜尋不同的 variable scope 的關係,實則不是 🤣
更詳細的原因在於 function scope 內用到的 bytecode 與 global scope 的 bytecode 不一樣。
function scope 用的是 STORE_FAST
這個指令,而 global scope 用到的是 STORE_NAME
, 2 者在實作上 STORE_FAST
是固定長度的 array, 而 STORE_NAME
使用的是 dictionary, 因此存取 global 的變數都得先算 hash 再到 hash table 搜尋,相較於 STORE_FAST
直接以索引進行存取來得慢。
這細微的差異就造成 Python 程式碼在 function 裡執行較快。