提高Python程式效能的七個習慣
Python在效能方面不卓越,但是使用一些小技巧,可以提高Python程式的效能,避免不必要的資源浪費。
1. 使用區域性變數
儘可能使用區域性變數替代全域性變數,可以是程式易於維護並且有助於提高效能節約成本。
在模組名稱空間中將變數替換為區域性變數,例如ls = os.linesep。一方面,可以提高程式效能,因為區域性變數的搜素速度更快;另一方面,用短標識替換長模組變數,提高可閱讀性。
2. 減少函式呼叫的數量
當需要確定物件型別時,使用isinstance()方法最好,id()次之,type()最差。
為了避免重複計算,不要把重複操作作為引數放入迴圈中。
使用模組X中的函式或者物件Y時,應該用from X import Y,而不是import X; X.Y。因此,當使用Y時,可以減少一次查詢(解析器不必先找到模組X,然後在模組X的字典中查詢Y)。
3. 使用對映來替換條件搜尋
對映(例如dict,等等)的搜尋速度比條件語句(例如if,等等)快很多。在Python中沒有select-case語句。
4. 直接迭代序列元素
對於序列(str, list, tuple, 等等),直接迭代序列元素比迭代元素索引要快。
5. 用生成器表示式替換列表解析
列表解析生成整個列表,會對大量資料的迭代產生負面作用。
而生成器表示式不會。生成器表示式不會建立一個列表,相反返回一個生成器,在需要的時候生成具體值(延遲的),這種方式對記憶體友好。
6. 先編譯後呼叫
當使用函式eval()和exec()來執行程式碼時,最好呼叫程式碼物件(通過compile()函式預先編譯成位元組碼)而不是直接呼叫str,這樣可以避免重複編譯過程多次和提高程式的效能。
正則表示式模式匹配是類似的。 在執行比較和匹配之前,最好將正則表示式模式編譯為正則表示式物件(通過re.complie()函式)。
7. 模組程式設計的習慣
模組中最高級別的Python語句(無縮排程式碼)將在匯入模組時執行(是否真的需要執行)。 因此,您應該嘗試將模組的所有功能程式碼放入函式中(與主程式相關的功能程式碼也可以放入main()函式,主程式本身呼叫main()函式)。
測試程式碼可以寫在模組的main()函式中。 將在主程式中檢測__name__的值。 如果是"__main__"(表示模組是直接執行的),則呼叫main()函式進行測試; 如果它是模組的名稱(表示模組被呼叫),則不會執行測試。