'''
测时间函数示例
'''
import sys
import time
def timer(func, *pargs, **kargs):
_reps = kargs.pop('_reps', 1000)
start = time.perf_counter()
for i in range(_reps):
ret = func(*pargs, **kargs)
elapsed = time.perf_counter() - start
return (elapsed, ret)
def best_timer(func, *pargs, **kargs):
_reps = kargs.pop('_reps', 50)
best = 2 ** 32
for i in range(_reps):
(time, ret) = timer(func, _reps=1, *pargs, **kargs)
if time < best: best = time
return (best, ret)
def forloop():
res = []
for x in repslist:
res.append(bin(x))
return res
def listcomp():
return [bin(x) for x in repslist]
def mapcall():
return list(map(bin, repslist))
def genexpr():
return list(bin(x) for x in repslist)
def genfunc():
def gen():
for x in repslist:
yield bin(x)
return list(gen())
repslist = range(-10000, 10000)
print(sys.version)
for tester in (timer, best_timer):
print(f'<{tester.__name__}>')
for test in (forloop, listcomp, mapcall, genexpr, genfunc):
elasped, result = tester(test)
print('-' * 35)
print(f'{test.__name__:9s} {elasped:.5f} => [{result[0]}...{result[-1]}]')