#! /usr/bin/python3 # =================================================================== # From YouTube video: "Python Decorators Tutorial" # # to remove duplicate performance timing code in every function # =================================================================== import time def time_it(func): def wrapper(*args,**kwargs): start = time.time() result = func(*args,**kwargs) end = time.time() print('{:11} took {} mil sec'. format(func.__name__,(end-start)*1000)) return result return wrapper @time_it def calc_square(numbers): ##start = time.time() results = [] for number in numbers: results.append(number*number) ##end = time.time() ##print('calc_square took {} mil sec'.format((end-start)*1000)) return results @time_it def calc_cube(numbers): ##start = time.time() results = [] for number in numbers: results.append(number*number*number) ##end = time.time() ##print('calc_cube took {} mil sec'.format((end-start)*1000)) return results array = range(1,1000000) out_square = calc_square(array) out_cube = calc_cube(array)