使用函數最佳化 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中文網其他相關文章!