首頁 >後端開發 >Python教學 >為什麼函數封裝可以提升Python程式碼執行速度?

為什麼函數封裝可以提升Python程式碼執行速度?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-13 07:29:02949瀏覽

Why Does Function Encapsulation Enhance Python Code Execution Speed?

透過函數封裝提高程式碼執行速度

執行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        

函數外ftion :

  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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn