File: LP6E/Chapter39/timerdeco1.py
"Caveat: timer won't work on methods as coded (see quiz solution)"
import time, sys
class timer:
def __init__(self, func):
self.func = func
self.alltime = 0
def __call__(self, *args, **kargs):
start = time.perf_counter()
result = self.func(*args, **kargs)
elapsed = time.perf_counter() - start
self.alltime += elapsed
print(f'{self.func.__name__}: {elapsed:.5f}, {self.alltime:.5f}')
return result
@timer
def listcomp(N):
return [x * 2 for x in range(N)]
@timer
def mapcall(N):
return list(map((lambda x: x * 2), range(N)))
if __name__ == '__main__':
for func in (listcomp, mapcall):
result = func(5) # Time for this call, result
func(50_000)
func(500_000)
func(1_000_000)
print(result)
print(f'allTime = {func.alltime}\n') # Total time for all func calls
print('**map/comp =', round(mapcall.alltime / listcomp.alltime, 3))