Python装饰器:让代码优雅加倍
装饰器(Decorator)是Python中最优雅的特性之一,它允许我们在不修改原函数代码的情况下,为函数添加新功能。这种基于闭包的高阶函数应用,完美体现了Python的“优雅明确”哲学。
什么是装饰器?
装饰器本质上是一个接收函数作为参数,并返回一个新函数的可调用对象。通过@decorator语法糖,我们可以轻松地将装饰器应用到目标函数上。
实践示例
import time
from functools import wraps
def timer_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"{func.__name__} 执行耗时: {time.time()-start:.2f}秒")
return result
return wrapper
@timer_decorator
def process_data(n):
"""模拟数据处理函数"""
return sum(i*i for i in range(n))
# 调用被装饰的函数
result = process_data(1000000)
装饰器的妙用
除了性能监控,装饰器还常用于:
- 权限验证和访问控制
- 日志记录和审计追踪
- 缓存优化(如LRU缓存)
- 输入参数验证和类型检查
通过@functools.wraps保留原函数的元信息,我们的装饰器会更加完善。装饰器的链式调用(多个装饰器堆叠)和带参数装饰器进一步扩展了其应用场景。
掌握装饰器不仅能让代码更加简洁,更是迈向Python高级编程的重要一步。它体现了“关注点分离”的设计思想,让业务逻辑与横切关注点优雅解耦。