py_decorators_001.py

#! /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)