透過函數封裝提高程式碼執行速度
執行Python程式碼時,我們注意到函數中包含的程式碼運行速度明顯快於在函數外部執行相同的程式碼。為了研究這種現象,讓我們分析一個簡單的程式碼片段:
def main(): for i in xrange(10**8): pass main()
當在 main() 函數中執行時,程式碼的運行時間約為 1.8 秒。但是,如果 for 迴圈放在函數外部,則執行時間會增加到 4.5 秒左右:
for i in xrange(10**8): pass
這種效能差異的原因在於 Python 編譯程式碼的方式。當程式碼在函數內執行時,它被編譯成稱為字節碼的形式。字節碼是 Python 虛擬機器 (PVM) 比原始 Python 程式碼執行效率更高的指令序列。
使用dis 模組檢查程式碼片段的字節碼揭示了差異:
函數內:
2 0 SETUP_LOOP 20 (to 23) 3 LOAD_GLOBAL 0 (xrange) 6 LOAD_CONST 3 (100000000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 6 (to 22) 16 STORE_FAST 0 (i) 3 19 JUMP_ABSOLUTE 13 >> 22 POP_BLOCK >> 23 LOAD_CONST 0 (None) 26 RETURN_VALUE
1 0 SETUP_LOOP 20 (to 23) 3 LOAD_NAME 0 (xrange) 6 LOAD_CONST 3 (100000000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 6 (to 22) 16 STORE_NAME 1 (i) 2 19 JUMP_ABSOLUTE 13 >> 22 POP_BLOCK >> 23 LOAD_CONST 2 (None) 26 RETURN_VALUE關鍵的差異在於第16行和第 19 行的指令。在函數內,變數 i 使用 STORE_FAST 存儲,該函數針對局部變數進行了最佳化。然而,在函數外部,i 是使用 STORE_NAME 儲存的,由於它屬於全域變量,因此計算量更大。 因此,透過將程式碼封裝在函數內,我們最佳化了變數的儲存和檢索,從而執行速度更快。
以上是為什麼函數封裝可以提升Python程式碼執行速度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!