1. Simple decorator:
def decorator_function(passed_method):
def returns_method():
print("Decorating function: {}".format(passed_method.__name__))
return passed_method()
return returns_method
def speak():
print("01101")
speak = decorator_function(speak)
speak()
Is same as:def decorator_function(passed_method):
def returns_method():
print("Decorating function: {}".format(passed_method.__name__))
return passed_method()
return returns_method
@decorator_function
def speak():
print("01101")
speak()
Output:
Decorating function: speak
01101
1.2 Decoration with arguments:
def decorator_function(passed_method):
def returns_method(*args, **kwargs):
print("Decorating function: {}".format(passed_method.__name__))
return passed_method(*args, **kwargs)
return returns_method
@decorator_function
def speak(word):
print(word)
@decorator_function
def say(argument):
print(argument)
speak("Hello")
say("World is round")
Output:
Hello
Decorating function: say
World is round
def function_time(passed_method): import time def returns_method(*args, **kwargs): t1 = time.time() result = passed_method(*args, **kwargs) time_span = time.time() - t1 print("Function: {}, Time: {}".format(passed_method.__name__, time_span)) return result return returns_method @function_time def process(): return [x for x in range(10000)] process()Output:
Function: process, Time: 0.0006840229034423828