Python装饰器:给函数加个“Buff”
Python中有个强大的功能叫装饰器,它就像游戏里的装备栏,能给函数附加额外能力而不改变函数本身。今天我们就来揭开这个“魔法”工具的神秘面纱。
什么是装饰器?
装饰器本质上是个函数,它接收一个函数作为参数,然后返回一个新函数。这种设计模式遵循了“开放封闭原则”——对扩展开放,对修改封闭。
从简单示例开始
def timer(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} 执行耗时: {end - start:.2f}秒")
return result
return wrapper
@timer
def heavy_calculation():
# 模拟耗时操作
import time
time.sleep(1)
return "计算完成"
# 调用函数时会自动计时
result = heavy_calculation()
上面的@timer就是一个装饰器,它给函数添加了计时功能,而原函数不需要任何修改。
装饰器的妙用
除了性能监控,装饰器还能用于:
- 权限验证
- 日志记录
- 缓存机制
- 输入验证
- 重试机制
带参数的装饰器
def retry(max_attempts=3):
def decorator(func):
def wrapper(*args, **kwargs):
for attempt in range(max_attempts):
try:
return func(*args, **kwargs)
except Exception as e:
if attempt == max_attempts - 1:
raise e
print(f"第{attempt + 1}次尝试失败,正在重试...")
return wrapper
return decorator
@retry(max_attempts=5)
def unstable_api_call():
# 可能失败的操作
pass
结语
装饰器让代码更干净、更模块化。下次当你发现多个函数需要相同的前置或后置处理时,不妨考虑用装饰器来优化代码结构。这个小小的“语法糖”,能让你的Python代码更加优雅强大!