為什麼追加到清單比清單理解慢很多?
列表理解因其簡潔和高效而在 Python 中廣受歡迎。雖然它可能顯示為常規 for 迴圈的語法快捷方式,但它提供了顯著的效能優勢,尤其是在將元素附加到清單時。
基準測試差異
考慮以下程式碼片段:
從結果可以看出,列表理解速度明顯更快,比附加方法快了大約50%。
深入探究原因
列表理解本質上是一種語法構造,它基於現有的可迭代生成新列表。與附加方法不同,它不需要在每次迭代時檢索和呼叫附加屬性。
程式碼反彙編
使用反彙編器進行更深入的分析提供見解深入了解根本差異:
在使用附加的函數的反組譯程式碼中,每次迭代都有一個明顯的LOAD_METHOD 和CALL_METHOD 對(字節碼18-22)。這些指令處理附加屬性的載入和調用,這會產生開銷。
相反,列表理解版本(字節碼 10-12)涉及單一 CALL_FUNCTION 指令。此指令無需屬性檢索即可有效率地建構新清單。
結論
列表理解效率的提升源自於其最佳化的實作。透過避免重複載入和呼叫追加屬性,列表理解可以按需建立列表,從而顯著提高效能,特別是在處理大型迭代時。
以上是為什麼列表推導式比 Python 中添加到列表要快得多?的詳細內容。更多資訊請關注PHP中文網其他相關文章!