Decorators
In Chapter 5, Comprehensions and Generators, we measured the execution time of various expressions.
If you recall, we had to initialize a variable to the start time and subtract it from the current time after execution in order to calculate the elapsed time. We also printed it on the console after each measurement. That was tedious.
Every time we find ourselves repeating things, an alarm bell should go off. Can we put that code in a function and avoid repetition? The answer most of the time is yes, so let's look at an example:
# decorators/time.measure.start.py
from time import sleep, time
def f():
sleep(.3)
def g():
sleep(.5)
t = time()
f()
print('f took:', time() - t) # f took: 0.3001396656036377
t = time()
g()
print('g took:', time() - t) # g took: 0.5039339065551758
In the preceding code, we defined two functions, f()
and g()
, which do nothing but sleep (for 0.3 and 0.5 seconds, respectively). We used the sleep()
...