Python装饰器是不修改原函数代码而动态增强其功能的高阶函数,本质为接收函数并返回新函数;支持无参、带参及内置装饰器如@property、@lru_cache等,使用时需注意元信息丢失、性能影响和叠加顺序。
Python装饰器是一种用于修改或增强函数行为的简洁工具,它不改变原函数代码,却能动态添加功能,比如日志记录、权限校验、性能计时等。
装饰器本质上是一个接受函数作为参数、并返回新函数的高阶函数。最简形式如下:
def my_decorator(func):
def wrapper():
print("调用前执行")
func()
print("调用后执行")
return wrapper
使用 @my_decorator 语法糖,等价于 func = my_decorator(func),让代码更清晰可读。
当需要为不同函数传入不同配置(如重试次数、超时时间)时,需再嵌套一层函数:
例如实现一个可配置重试次数的装饰器,就能复用于多个网络请求函数,无需重复写重试逻辑。
Python标准库提供了几个高频实用的装饰器:
践使用装饰器时容易忽略几个关键细节: