优雅的Python装饰器:让代码更简洁高效
装饰器是Python中最优雅的特性之一,它允许我们在不修改原函数代码的情况下,为函数添加新功能。今天我们就来探索这个强大的工具。
什么是装饰器?
简单来说,装饰器就像礼物的包装纸——它包裹着函数,为其添加额外的功能,而函数本身的核心逻辑保持不变。
实际应用示例
让我们看一个最常见的装饰器用例——记录函数运行时间:
import time
import functools
def timer(func):
@functools.wraps(func)
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
def heavy_computation(n):
return sum(i*i for i in range(n))
# 调用时会自动计时
result = heavy_computation(1000000)
更实用的权限验证装饰器
def require_login(func):
def wrapper(user, *args, **kwargs):
if not user.get('is_authenticated'):
raise PermissionError("用户未登录")
return func(user, *args, **kwargs)
return wrapper
@require_login
def view_profile(user):
return f"欢迎回来,{user['name']}!"
为什么使用装饰器?
- 代码复用:相同功能只需编写一次
- 关注点分离:业务逻辑与辅助功能分离
- 可读性强:通过@符号清晰表达函数特性
- 易于维护:修改装饰器即可影响所有使用它的函数
给初学者的建议
装饰器初看可能有些抽象,但一旦掌握,你会发现在Web开发(Flask/Django)、日志记录、性能监控等场景中无处不在。从简单的装饰器开始实践,逐步理解其原理,你会发现Python代码可以变得如此简洁而强大。
记住:装饰器不是魔法,而是Python函数作为一等公民特性的自然体现。掌握它,你的Python编程水平将迈上新台阶!