函數內更快的Python 程式碼:揭示最佳化執行
執行Python 程式碼時,將操作包含在函數中通常會帶來顯著的性能提升。這個顯著的差異激發了好奇心:為什麼Python程式碼在函數中執行得更快?
調查速度差異
考慮以下程式碼片段:
def main(): for i in xrange(10**8): pass main()
執行此程式碼大約需要 1.8 秒的時間。然而,當 for 迴圈在函數外部執行時:
for i in xrange(10**8): pass
執行需要更長的 4.5 秒。
字節碼分析:揭示根本原因
為了理解這種效能差異,我們深入研究了 Python 產生的字節碼。在函數內部,字節碼顯示一系列操作,用於設定循環、計算範圍並迭代它。此結構針對速度進行了最佳化。
在頂層,字節碼略有不同。變數 i 被宣告為全域變量,導致儲存操作 (STORE_NAME) 比函數中使用的本機儲存操作 (STORE_FAST) 慢。
要檢查字節碼,dis 模組提供了寶貴的幫助。以下指令分別反組譯函數與頂層程式碼:
import dis dis.dis(main) dis.dis(compile('for i in xrange(10**8): pass', '', 'exec'))
結論
Python 中函數內執行程式碼的效能優勢源自於下列最佳化:字節碼執行。與使用全域變數(涉及較慢的 STORE_NAME 指令)相比,使用 STORE_FAST 指令表示的局部變數可顯著提高執行速度。
以上是為什麼 Python 程式碼在函數內部速度更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!