為什麼將程式碼封裝在函數中可以提高 Python 效能?

Patricia Arquette
發布: 2024-11-11 02:21:02
原創
921 人瀏覽過

Why Does Encapsulating Code in Functions Increase Python Performance?

使用函數最佳化 Python 程式碼效能

已觀察到在 Python 中的函數內運行特定程式碼可以顯著提高其執行速度。讓我們調查一下這種奇怪行為背後的原因。

最初,for 循環被封裝在一個函數中:

def main():
    for i in xrange(10**8):
        pass
main()
登入後複製

此程式碼表現出值得稱讚的性能,在 2 秒內完成。然而,當 for 迴圈獨立執行而不包含在函數中:

for i in xrange(10**8):
    pass
登入後複製

其執行時間飆升至 4 秒以上。為了揭開這個差異背後的謎團,我們必須深入研究 Python 解譯器產生的字節碼。

檢查函數的字節碼,我們注意到變數 i 是使用 STORE_FAST 操作碼分配的。

LOAD_FAST               0 (i)
登入後複製

當在頂層執行 for 迴圈時,使用 STORE_NAME 為變數 i 賦值操作碼。

STORE_NAME               1 (i)
登入後複製

至關重要的是,STORE_FAST 是比 STORE_NAME 更有效率的操作。這種效率源於這樣一個事實:當 i 是函數內的局部變數(使用 STORE_FAST)時,它會儲存在堆疊幀上。相反,當 i 是全域變數(使用 STORE_NAME)時,它必須儲存在全域變數字典中。

要進一步檢查字節碼,您可以使用 dis 模組。為了直接反組譯函數,可以使用 dis 模組。然而,對於在頂層執行的程式碼的反彙編,必須利用編譯內建函數。

透過了解底層字節碼操作,我們可以利用Python中函數的強大功能來有效優化程式碼執行速度。

以上是為什麼將程式碼封裝在函數中可以提高 Python 效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板