Python装饰器:让代码更优雅的魔法工具
在Python中,装饰器(Decorator)是一种强大的语法特性,它允许我们在不修改原函数代码的情况下,为函数添加新功能。这种“元编程”能力让Python代码更加简洁优雅。
装饰器是什么?
装饰器本质上是一个接受函数作为参数的高阶函数,它返回一个新函数,通常用于扩展原函数的行为。这种模式遵循“开放-封闭”原则:对扩展开放,对修改封闭。
一个简单示例
def timer_decorator(func):
import time
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} 执行时间: {end-start:.4f}秒")
return result
return wrapper
@timer_decorator
def slow_function():
time.sleep(1)
return "完成"
# 调用时会自动计时
result = slow_function()
装饰器的应用场景
- 性能监控:如上面的执行时间统计
- 权限验证:检查用户是否有权访问某个函数
- 日志记录:自动记录函数调用信息
- 缓存机制:存储函数结果,避免重复计算
- 输入验证:检查函数参数的有效性
使用functools.wraps
为了避免装饰器带来的元数据丢失问题,建议使用functools.wraps:
from functools import wraps
def my_decorator(func):
@wraps(func) # 保留原函数的元数据
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
装饰器是Python中极其有用的工具,掌握它能让你写出更加简洁、可维护的代码。从简单的功能增强到复杂的框架设计,装饰器无处不在,是每个Python开发者都应该掌握的“魔法”技能。