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
,在x
為false
的情況下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 1
比while 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...