對迭代的各種方法性能的比較

以下通過程序對迭代方法進行比較,

模塊1:mytimer.py

import time
reps=1000
repslist=range(reps)

def timer(func,*pargs,**kargs):
    start=time.clock()
    for i in repslist:
        ret=func(*pargs,**kargs)
    elapsed=time.clock()-start
    return (elapsed,ret)

time2.py

import sys,mytimer
reps=10000

repslist=range(reps)

def forloop():
    res=[]
    for x in repslist:
        res.append(abs(x))
    return res

def listComp():
    return [abs(x) for x in repslist]

#def mapCall():                           #只認用於3.0版本。
#    return list(map(abs,replist))        #

def genExpr():
    return list(abs(x) for x in repslist)

def genFunc():
    def gen():
        for x in repslist:
            yield abs(x)
    return list(gen())

print(sys.version)

for test in (forloop,listComp,genExpr,genFunc):
    elapsed,result=mytimer.timer(test)
    print '-'*33
    print '%-9s:%.5f==>[%s...%s]' % (test.__name__,elapsed,result[0],result[-1])
在2.7版本下
2.7.5 (default, Sep 16 2013, 23:16:52) [MSC v.1500 32 bit (Intel)]
---------------------------------
forloop  :1.38339==>[0...9999]
---------------------------------
listComp :0.70408==>[0...9999]
---------------------------------
genExpr  :0.90445==>[0...9999]
---------------------------------
genFunc  :0.88582==>[0...9999]

當生成的列表較大時,優勢更加明顯,我這裏將生成999999個元素的列表,
2.7.5 (default, Sep 16 2013, 23:16:52) [MSC v.1500 32 bit (Intel)]
---------------------------------
forloop  :147.95689==>[0...999998]
---------------------------------
listComp :88.12757==>[0...999998]
---------------------------------
genExpr  :108.48967==>[0...999998]
---------------------------------
genFunc  :105.21874==>[0...999998]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章