1 #mytimer.py 2 3 import time,sys 4 5 if sys.platform[:3] == 'win': 6 timefunc = time.clock 7 else: 8 timefunc = time.time 9 10 def trace(*args): pass 11 12 def timer(func, *pargs, **kargs): 13 _reps = kargs.pop('_reps', 1000) 14 trace(func, pargs, kargs, _reps) 15 repslist = range(_reps) 16 start = timefunc() 17 for i in repslist: 18 ret = func(*pargs, **kargs) 19 elapsed = timefunc() - start 20 return (elapsed, ret) 21 22 def best(func, *pargs, **kargs): 23 _reps = kargs.pop('_reps', 50) 24 best = 2 ** 32 25 for i in range(_reps): 26 (time, ret) = timer(func, *pargs, _reps=1, **kargs) 27 if time < best: best = time 28 return (best, ret)
1 # timeseqs 2 3 import sys, mytimer 4 5 reps = 10000 6 repslist = range(reps) 7 8 def forLoop(): 9 res = [] 10 for x in repslist: 11 res.append(abs(x + 10)) 12 return res 13 14 def listComp(): 15 return [abs(x + 10) for x in repslist] 16 17 def mapCall(): 18 return list(map(lambda x: x + 10, repslist)) 19 20 def genExpr(): 21 return list(abs(x + 10) for x in repslist) 22 23 def genFunc(): 24 def gen(): 25 for x in repslist: 26 yield abs(x + 10) 27 return list(gen()) 28 29 print(sys.version) 30 31 for tester in (mytimer.timer, mytimer.best): 32 print('<%s>' % tester.__name__) 33 for test in (forLoop, listComp, mapCall, genExpr, genFunc): 34 elapsed, result = tester(test) 35 print('-' * 35) 36 print('%-9s: %.5f => [%s...%s]' % (test.__name__, elapsed, result[0], result[-1]))