1. 程式人生 > >Python五種迭代方式 for迴圈,列表推導式,內建函式map(),生成器推導式,生成器函式 速度對比

Python五種迭代方式 for迴圈,列表推導式,內建函式map(),生成器推導式,生成器函式 速度對比

對比了Python3的五種迭代方式進行函式簡單計算的花費時間
五種迭代分別是,for迴圈,列表推導式,內建函式map(),生成器推導式,生成器函式
簡單計算以add()加10操作和abs()絕對值舉例

執行次數指每個函式執行的次數,預設每個函式對10000個數進行計算。

從測試結果可以看出效率從高到低依次為:
呼叫map > 列表解析 > 生成器函式 > 生成器表示式 > for迴圈
在這裡插入圖片描述

import time
import sys
#函式重複次數


def timer(func,*pargs,**kargs):
# func函式名稱,後面兩個是引數
    start = time.
clock() # 開始時間 for i in range(runtime): ret = func(*pargs,**kargs) elapsed = time.clock() - start # 花費時間 return (elapsed,ret) # ret記錄最後一次結果 reps=10000 repslist=range(reps) def forloop(): res = [] for x in repslist: res.append(abs(x)) return res #通過for迴圈迭代
def listComp(): return [abs(x) for x in repslist] #列表解析 def mapCall(): return list(map(abs,repslist)) #呼叫map def genExpr(): return list(abs(x) for x in repslist) #生成器表示式 def genFunc(): def gen(): for x in repslist: yield abs(x) return list(gen()) #生成器函式 # ======================================================================
def add(k): return k+10 def forloop2(): res = [] for x in repslist: res.append(add(x)) return res #通過for迴圈迭代 def listComp2(): return [add(x) for x in repslist] #列表解析 def mapCall2(): return list(map(add,repslist)) #呼叫map def genExpr2(): return list(add(x) for x in repslist) #生成器表示式 def genFunc2(): def gen(): for x in repslist: yield add(x) return list(gen()) #生成器函式 runtime=int(input('輸入執行次數:')) print(sys.version) for test in (forloop,listComp,mapCall,genExpr,genFunc): elapsed, result = timer(test) print ('{0:10}: {1:.5f} => [{2:}...{3:}]'.format(test.__name__,elapsed,result[0],result[-1])) print ('-'*40) for test in (forloop2,listComp2,mapCall2,genExpr2,genFunc2): elapsed, result = timer(test) print ('{0:10}: {1:.5f} => [{2:}...{3:}]'.format(test.__name__,elapsed,result[0],result[-1]))