Python装饰器:优雅增强函数功能
在Python中,装饰器(Decorator)是一种强大的语法特性,它允许我们在不修改原函数代码的情况下,为函数添加新功能。这种基于闭包的设计模式极大地提高了代码的可复用性和可读性。
装饰器基础
装饰器本质上是一个接受函数作为参数并返回函数的高阶函数。最简单的装饰器如下:
def simple_decorator(func):
def wrapper():
print("函数执行前")
func()
print("函数执行后")
return wrapper
@simple_decorator
def say_hello():
print("Hello!")
say_hello()
输出:
函数执行前
Hello!
函数执行后
实用装饰器示例
让我们实现一个常用的计时装饰器:
import time
from functools import wraps
def timer(func):
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__} 执行耗时: {end_time - start_time:.2f}秒")
return result
return wrapper
@timer
def heavy_calculation():
time.sleep(1)
return "计算完成"
result = heavy_calculation()
print(result)
这里使用了functools.wraps来保留原函数的元信息,这是一个很好的实践。
装饰器的应用场景
- 日志记录:自动记录函数调用信息
- 性能监控:测量函数执行时间
- 权限验证:检查用户权限后再执行函数
- 缓存:实现函数结果的缓存机制
- 参数验证:验证函数输入参数的合法性
结语
装饰器是Python编程中极具特色的功能,它体现了Python“优雅、明确、简单”的设计哲学。掌握装饰器不仅能让你的代码更加简洁,还能让你写出更加“Pythonic”的程序。
你在项目中用过哪些有趣的装饰器呢?欢迎分享你的经验!