Python学习之装饰器
装饰器是一个函数
装饰器具有一个功能。
装饰器像给其他函数穿外套:今天穿“日志外套”,明天换“缓存外套”,业务本体不动分毫。这就是“**非侵入式扩展”**的威力。
一个例子
日志记录功能的装饰器
import functools
import timedef log_call(func):@functools.wraps(func)def wrapper(*args, **kwargs):ts = time.strftime("%Y-%m-%d %H:%M:%S")print(f"[{ts}] CALL {func.__name__} args={args} kwargs={kwargs}")result = func(*args, **kwargs)print(f"[{ts}] RET {func.__name__} -> {result}")return resultreturn wrapper@log_call
def add(a, b):return a + badd(3,5)
Q:从数学复合函数角度,如何理解装饰器的闭包?
- 内层函数是被包装的函数,是被调用的函数
- 外层函数是装饰器
程序是记忆外部(提供参数),执行内部(本质逻辑)
其实和数学复合函数不一样。
复合函数是有buff叠加,而装饰器是在保有原效果基础上增添新功能(装饰器的功能)
就是房子刷漆,变漂亮了。