您好,登錄后才能下訂單哦!
這篇文章主要介紹了提高python程序性能的方法,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
Python在性能方面并不擅長,但通過一些提示,您可以嘗試提高程序性能并避免不必要的資源浪費。
1.使用局部變量
嘗試使用局部變量而不是全局變量使其易于維護,有助于提高性能并節(jié)省內(nèi)存。
使用局部變量替換模塊命名空間中的變量,例如ls = os.linesep。一方面,它可以提高程序性能,因為局部變量的搜索速度更快; 另一方面,冗長的模塊變量可以用短標(biāo)識符替換,以提高可讀性。
2.減少函數(shù)調(diào)用的次數(shù)
在確定對象類型時,最佳使用isinstance(),次優(yōu)使用id(),最差type()用于比較。
#Determine whether the variable num is an integer type type(num) == type(0) #call the function three times type(num) is type(0) #identity comparison isinstance(num,(int)) #call the function once
不要將重復(fù)操作作為參數(shù)放在循環(huán)中,以避免重復(fù)計算。
#Each loop needs to re-execute len(a) while i < len(a): statement #Only execute len(a) once m = len(a) while i < m: statement
要Y在模塊中使用函數(shù)或?qū)ο骕,您應(yīng)該from X import Y直接使用 而不是 import X; X.Y。因此,在使用時Y,您可以減少一次查詢(解釋器不必先找到X模塊,然后Y在X模塊的字典中查找)。
3.使用映射替換條件搜索
映射的搜索速度(例如dict等)比條件語句(例如if等)快得多。select-casePython中沒有聲明。
#if? reach if a == 1: b = 10 elif a == 2: b = 20 ... #dict reach,better performance d = {1:10,2:20,...} b = d[a]
4.直接迭代序列元素
對于序列(str,list,tuple等),迭代序列元件直接比迭代元件索引更快。
a = [1,2,3] #Iterate elements for item in a: print(item) #Iterate indexes for i in range(len(a)): print(a[i])
5.用生成器表達式替換列表解析
列表理解將產(chǎn)生整個列表,對大量數(shù)據(jù)的迭代產(chǎn)生負面影響。
但是生成器表達式?jīng)]有。它實際上并不創(chuàng)建一個列表,而是返回一個生成器,它在需要時產(chǎn)生一個值(延遲),這對內(nèi)存更友好。
#Calculate the number of non-null characters in file f #List analysis l = sum([len(word) for line in f for word in line.split()]) #generator expression l = sum(len(word) for line in f for word in line.split())
6.首先編譯然后調(diào)用
當(dāng)使用該函數(shù) eval() 并 exec() 執(zhí)行代碼時,最好調(diào)用代碼對象(通過compile() 函數(shù)預(yù)先編譯成字節(jié)碼 )而不是str 直接調(diào)用 ,這樣可以避免多次重復(fù)編譯過程并提高程序的性能。
正則表達式模式匹配是類似的。re.complie() 在執(zhí)行比較和匹配之前,最好將正則表達式模式編譯為正則表達式對象(通過 函數(shù))。
7.模塊編程的習(xí)慣
模塊中最高級別的Python語句(無縮進代碼)將在導(dǎo)入模塊時執(zhí)行(是否真的需要執(zhí)行)。因此,您應(yīng)該嘗試將模塊的所有功能代碼放入函數(shù)中(與主程序相關(guān)的功能代碼也可以放入 main() 函數(shù)中,主程序本身調(diào)用該 main() 函數(shù))。
測試代碼可以main() 在模塊的功能中編寫 。__name__ 將在主程序中檢測到該值 。如果是' __main__'(表示模塊是直接執(zhí)行的),則main() 調(diào)用該 函數(shù)進行測試; 如果它是模塊的名稱(表示模塊被調(diào)用),則不會執(zhí)行測試。
感謝你能夠認真閱讀完這篇文章,希望小編分享提高python程序性能的方法內(nèi)容對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。