Python进阶:用装饰器提升代码优雅度
装饰器(Decorator)是Python中一个强大而优雅的特性,它允许我们在不修改原函数代码的情况下,为函数添加额外功能。这种基于高阶函数的语法糖,让代码更加简洁可读。
什么是装饰器?
装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。使用@decorator_name语法,我们可以轻松地将装饰器应用到目标函数上。
def timer_decorator(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
result = func(*args, **kwargs)
print(f"{func.__name__}执行时间: {time.time()-start:.2f}秒")
return result
return wrapper
@timer_decorator
def expensive_operation():
# 模拟耗时操作
import time
time.sleep(1)
return "完成"
实际应用场景
- 性能监控:如上面的计时装饰器
- 权限验证:检查用户是否有权访问某些功能
- 日志记录:自动记录函数调用信息
- 缓存机制:存储函数结果,避免重复计算
一个实用案例:缓存装饰器
from functools import wraps
def cache_decorator(func):
cache = {
}
@wraps(func)
def wrapper(n):
if n not in cache:
cache[n] = func(n)
return cache[n]
return wrapper
@cache_decorator
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
这个简单的缓存装饰器将斐波那契数列的计算复杂度从O(2^n)降低到O(n),展示了装饰器在实际性能优化中的威力。
装饰器是Pythonic编程的典范,掌握它能让你写出更加模块化、可维护的代码。从今天开始,尝试在自己的项目中应用装饰器吧!