装饰器的工作原理
Python 装饰器(Decorator)的工作原理是什么?请用代码说明如何编写一个计时装饰器。
回答
苦行僧
装饰器本质上是一个接受函数作为参数并返回新函数的高阶函数。@decorator 语法糖等价于 func = decorator(func)。
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f'{func.__name__} took {time.time()-start:.2f}s')
return result
return wrapper
@timer
def slow_sum(n):
return sum(range(n))
使用 functools.wraps 可保留原函数的元信息(__name__, __doc__ 等)。