翻譯 | 更快的Python(一)
更快的Python(Python Faster Way)使用程式碼示例來說明如何書寫Python程式碼能帶來更高的效能。本文對程式碼進行了講解,從效能和可讀性等角度來選擇出最適合的寫法。
例子1:字串格式化

- 最差/最優時間比: 1.95
- 使用建議:Python 3.7或以上推薦使用f-string,其他版本推薦使用format方法。
- 說明:字串格式化是程式碼中最常遇到的情況,雖然在連線少量字串的情景中,使用+號的效能最優,但是使用+號的程式碼可讀性最差。如果使用Python 3.7或優以上版本,可以使用f-string來解決這個問題,f-string的效能比format方法和%操作符的效能都要高,可讀性也比+號好。
例子2:字典的初始化

- 最差/最優時間比: 1.83
- 使用建議:使用字面量初始化字典(以及其他集合型別)。
- 說明:Python中初始化集合型別時使用字面量的方式,直譯器會直接呼叫BUILD_MAP等位元組碼來建立,如果用建構函式的方式來建立,則需要先查詢構造方法,再執行構造方法。使用字面量初始化,Python程式碼也更簡潔。
例子3:內建排序方法

- 最差/最優時間比: 1.26
- 使用建議:根據是否需要修改原始值來決定使用哪個方法。
- 說明:sorted和list.sort方法是Python中內建的排序方法,sorted方法不會修改原始值,list.sort方法在原始值上直接排序,會修改原始值。比較這兩個方法的效能差異,意義不大。
例子4:初始化多個變數

- 最差/最優時間比: 1.01
- 使用建議:推薦使用第二種。
- 說明:從位元組碼中可以看出兩種方式出了執行順序之外,基本一致,所以效能上也非常接近。
例子5:多個變數的比較

- 最差/最優時間比: 1.11
- 使用建議:推薦使用第二種。
- 說明:使用第一種方法能帶來一定的效能提升,但是提升有限,在實際情況中也很少出現多個變數連續比較大小的情況,並且第一種方法非常不Pythonic,所以推薦使用第二種。
例子6:if true的條件判斷

- 最差/最優時間比: 1.17
- 使用建議:推薦使用第一種。
- 說明:從位元組碼上看,第一種方法的效能最高,並且語法上也更加簡潔。
例子7:if false的條件判斷

- 最差/最優時間比: 1.10
- 使用建議:推薦使用第一種。
- 說明:從位元組碼上看,第一種方法的效能最高,語法角度上,if not寫成第二種和第三種都是不推薦的。
例子8:判斷list是否為空

- 最差/最優時間比: 1.55
- 使用建議:根據具體需求,優先使用前兩種。
- 說明:前兩種程式碼效能更高,程式碼更簡潔。同時,空列表a並不等於None,所以使用if a is None無法實現對空列表的判斷。
例子9:判斷object是否為空

- 最差/最優時間比: 1.00
- 使用建議:根據具體需求,優先使用前兩種。
- 說明:理由同上一個例子。
例子10:遍歷可迭代物件

- 最差/最優時間比: 1.12
- 使用建議:根據具體情況選擇。
- 說明:兩者效能差別不大,使用enumerate方法,可以不需要取物件的長度,可以直接獲取到物件的index。
參考文章
- ofollow,noindex">Python Faster Way