Python装饰器:给代码穿上智能“外衣”
在Python中,装饰器(Decorator)是一种优雅而强大的语法特性,它允许我们在不修改原函数代码的情况下,为其添加新功能。这就像是给函数穿上了一件智能“外衣”,既能保持核心逻辑简洁,又能扩展其能力。
一个简单的缓存装饰器
让我们来看一个实用案例:创建一个缓存装饰器来优化函数性能。
from functools import wraps
def cache_decorator(func):
"""缓存装饰器,存储函数计算结果避免重复计算"""
cache = {
}
@wraps(func)
def wrapper(*args):
if args not in cache:
cache[args] = func(*args)
return cache[args]
return cache[args]
return wrapper
@cache_decorator
def fibonacci(n):
"""计算斐波那契数列"""
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
# 测试:重复计算会直接使用缓存结果
print(fibonacci(10)) # 首次计算
print(fibonacci(10)) # 从缓存读取,速度极快
装饰器的魔法之处
这个简单的@cache_decorator展示了装饰器的核心价值:
- 非侵入式增强:原函数
fibonacci的逻辑没有任何改变 - 关注点分离:缓存逻辑与业务逻辑完全解耦
- 代码复用:同一装饰器可以应用于多个函数
实际应用场景
装饰器在实际开发中用途广泛:
- 日志记录:自动记录函数调用信息
- 性能监控:计算函数执行时间
- 权限验证:检查用户权限后再执行函数
- 错误处理:统一捕获和处理异常
总结
Python装饰器体现了“修饰而非修改”的编程哲学,通过高阶函数和闭包的巧妙结合,让代码更加模块化、可维护。掌握装饰器不仅能写出更优雅的代码,还能深入理解Python的函数式编程特性。
下次当你发现多个函数需要相同的前置或后置处理时,不妨考虑使用装饰器——这层智能“外衣”能让你的代码既简洁又强大。