Python decorator is just a Syntactic Sugar which can add a wrapper for functions.
In this post, I use a timming decorator to explain it.
import time
from functools import wraps
conf = True
def timing_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
if conf:
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Function {func.__name__} took {end_time - start_time} seconds to run.", flush=True)
return result
else:
return func(*args, **kwargs)
return wrapper
@timing_decorator
def xxx(a, b, b):
pass
Decorator is a function with the function to be decorated as parameter, and return decorated function. In this example, when call the function xxx
, the wrapper
function which is returned by timing_decorator(xxx)
is called.
xxx(a ,b , c)
= timing_decorator(xxx)(a, b, c)
= wrapper(a, b, c)
@wraps(func)
is used to keep the xxx
’s document and attributes.