測時間函數示例

'''
測時間函數示例
'''
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]}]')

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