|
30鱼币
本帖最后由 wow7jiao 于 2016-11-5 15:12 编辑
import sys, mytimer
reps = 10000
repslist = range(reps)
def forLoop():
res = []
for x in repslist:
res.append(abs(x))
return res
# timeseqs
def listComp():
return [abs(x) for x in repslist]
def mapCall():
return list(map(abs, repslist))
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 tester in (mytimer.timer, mytimer.best):
print('<%s>' % tester.__name__)
for test in (forLoop, listComp, mapCall, genExpr, genFunc):
elapsed, result = tester(test)
print ('-' * 35)
print ('%-9s: %.5f => [%s...%s]' %
(test.__name__, elapsed, result[0], result[-1]))
#mytimer
import time, sys
if sys.platform[:3] == 'win':
timefunc = time.clock
else:
timefunc = time.time
def trace(*args):pass#请问这个trace收集下面的4个参数(func, pargs, kargs, _reps)
有什么用?
def timer(func, *pargs, **kargs):
_reps = kargs.pop('_reps', 1000)
trace(func, pargs, kargs, _reps)
repslist = range(_reps)
start = timefunc()
for i in repslist:
ret = func(*pargs, **kargs)
elapsed = timefunc() - start
return (elapsed, ret)
def best(func, *pargs, **kargs):#best为什么运行起来快这么多?
_reps = kargs.pop('_reps', 50)
best = 2 ** 32 #<== best = 2**32 ??这步不是多余的?
for i in range(_reps):
(time, ret) = timer(func, *pargs, _reps=1, **kargs)#请问上面timer只有3个参数(func, *pargs, **kargs),为什么这里要填4个?
return (best, ret) |
|