Python效能優化

2021-07-15 08:41:34 字數 1951 閱讀 7343

python是資料分析神器。你肯定會遇到效能上的問題,比如一段程式要跑好幾個小時,但其實你優化一下程式,就只花幾分鐘而已。

下面是一些效能優化上的建議:

1.盡可能地減少io操作

io操作是非常耗時的,相對於cpu運算來說。一次檔案讀取,請取出你後面可能用到的最多資料。

2.減少迴圈的使用

盡可能地在一次迴圈中多執行些操作。(但並不意味著你把不應該放到迴圈體內的操作放進來)

典型的場景:一次迴圈,迴圈體內執行a;。。。;再一次同樣的迴圈,迴圈體內執行b

優化:只保留乙個迴圈

3.不要在迴圈體內進行不必要的操作

操作能放到迴圈體外,就不要放到迴圈體內來。

4.優化演算法的時間複雜度

慎用指數級複雜度

5.使用python合適的資料結構

set,dict索引(雜湊索引)都比list快很多

所以當使用指數級時間複雜度的演算法時,可以選擇用dict做迴圈(不使用list)

6.能使用科學計算庫或者內建庫時,就不要自己寫輪子

因為python的科學計算庫都是用底層c/c++寫的,效能都是很好的。

比如你能使用內建庫實現排序,就不要自己用python寫個冒泡。

7.迴圈時,請及時break

8.充分利用 lazy if-evaluation 的特性

python 中條件表示式是 lazy evaluation 的,也就是說如果存在條件表示式if x and y,在xfalse的情況下y表示式的值將不再計算。因此可以利用該特性在一定程度上提高程式效率。

9.字串的優化

python 中的字串物件是不可改變的,因此對任何字串的操作如拼接,修改等都將產生乙個新的字串物件,而不是基於原字串,因此這種持續的 copy 會在一定程度上影響 python 的效能。

10.生成乙個列表時,列表解析式比for迴圈更高效。

在位元組碼級別,兩種方式稍有差別,但是列表解析式的效能是優於for迴圈的。

11.建立大規模列表(大約有1000以上元素)時,生成器表示式比列表解析式更快;在建立小規模列表(大約有100以下元素)時,列表解析式更快

注意我們上面說的只是建立列表方面,至於儲存、迭代方面,大量元素時生成器表示式依然是很有優勢的。

12.map時,使用內建函式

map(operator.add, list1, list2)map(lamnda x, y: x+y, list1, list2)要快。

13.列表需要pop或者insert時,使用佇列比使用list好

14.sort時,盡可能使用key函式排序,不要使用cmp函式

15.while 1while true

16.多元賦值很慢,除非用它做變數交換,否則就不要使用它

17.鏈式比較更快

x < y < z比x18.命名元組替換簡單物件

當你需要建立大量簡單物件時,可以嘗試。

ref

python **效能優化技巧

python 之效能優化

類似 os.linesep 這樣的名字需要直譯器做兩次查詢 1 查詢os 以確認它是乙個模組,2 在這個模組中查詢 linesep 變數。因為模組也是全域性變數,我們多消耗了系統資源。如 果你在乙個函式中類似這樣頻繁使用乙個屬性,我們建議你為該屬性取乙個本地變數別名。變 量查詢速度將會快很多 在查詢...

python 效能優化(2)

第二部分 有益的提醒,靜態編譯的 仍然重要.僅例舉幾例,chrome,firefox,mysql,ms office 和 photoshop都是高度優化的軟體,我們每天都在使用.python作為解析語言,很明顯不適合.不能單靠python來滿足那些效能是首要指示的領域.這就是為什麼python支援讓...

Python效能優化(一)

python是一種解釋型的語言,本身的計算效能並不高。但是python已經發展成為了一種訪問高效能技術的理想平台,不同庫的使用將大大影響運算的速度。下面就各種計算庫的計算速度做乙個簡單的測試 一 math庫的計算 from math import from time import ctime imp...