如何提高python程式的效能

gamebus發表於2021-09-11

如何提高python程式的效能

Python在效能方面並不擅長,但透過一些提示,您可以嘗試提高程式效能並避免不必要的資源浪費。

1.使用區域性變數

嘗試使用區域性變數而不是全域性變數使其易於維護,有助於提高效能並節省記憶體。

使用區域性變數替換模組名稱空間中的變數,例如ls = os.linesep。一方面,它可以提高程式效能,因為區域性變數的搜尋速度更快; 另一方面,冗長的模組變數可以用短識別符號替換,以提高可讀性。

2.減少函式呼叫的次數

在確定物件型別時,最佳使用isinstance(),次優使用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

不要將重複操作作為引數放在迴圈中,以避免重複計算。

#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在模組中使用函式或物件X,您應該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.用生成器表示式替換列表解析

列表理解將產生整個列表,對大量資料的迭代產生負面影響。

但是生成器表示式沒有。它實際上並不建立一個列表,而是返回一個生成器,它在需要時產生一個值(延遲),這對記憶體更友好。

#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.首先編譯然後呼叫

當使用該函式  eval() 並  exec() 執行程式碼時,最好呼叫程式碼物件(透過compile() 函式預先編譯成位元組碼  )而不是str 直接呼叫  ,這樣可以避免多次重複編譯過程並提高程式的效能。

正規表示式模式匹配是類似的。re.complie() 在執行比較和匹配之前,最好將正規表示式模式編譯為正規表示式物件(透過  函式)。

7.模組程式設計的習慣

模組中最高階別的Python語句(無縮排程式碼)將在匯入模組時執行(是否真的需要執行)。因此,您應該嘗試將模組的所有功能程式碼放入函式中(與主程式相關的功能程式碼也可以放入  main() 函式中,主程式本身呼叫該  main() 函式)。

測試程式碼可以main() 在模組的功能中編寫  。__name__ 將在主程式中檢測到該值  。如果是' __main__'(表示模組是直接執行的),則main() 呼叫該  函式進行測試; 如果它是模組的名稱(表示模組被呼叫),則不會執行測試。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4687/viewspace-2836746/,如需轉載,請註明出處,否則將追究法律責任。

相關文章