Python装饰器:让代码优雅加倍
在Python中,装饰器(Decorator)是一种强大而优雅的工具,它允许我们在不修改原始函数代码的情况下,为其添加新功能。这就像给函数“穿上外套”,既保持了原有功能,又增加了额外特性。
装饰器基础
装饰器本质上是一个接受函数作为参数并返回新函数的高阶函数。最简单的装饰器示例如下:
def simple_decorator(func):
def wrapper():
print("函数执行前")
func()
print("函数执行后")
return wrapper
@simple_decorator
def say_hello():
print("Hello, World!")
say_hello()
实际应用:性能监控
装饰器在实际开发中非常有用。比如,我们可以创建一个计时装饰器来监控函数执行时间:
import time
import functools
def timer_decorator(func):
@functools.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:.4f}秒")
return result
return wrapper
@timer_decorator
def process_data():
time.sleep(1)
return "处理完成"
result = process_data()
为什么使用装饰器?
- 代码复用:避免在多个函数中重复相同的代码
- 关注点分离:保持核心逻辑与辅助功能分离
- 可读性:通过
@decorator语法清晰表明函数增强 - 灵活性:可以轻松添加或移除功能
小贴士
- 使用
functools.wraps保留原始函数的元数据 - 装饰器可以堆叠使用,按顺序从内到外执行
- 装饰器也可以接受参数,创建更灵活的装饰器工厂
装饰器是Python编程中的“魔法”工具之一,合理使用能让你的代码更加简洁、可维护。掌握装饰器,是成为Python高级开发者的重要一步!
试着为你项目中重复的横切关注点(如日志、验证、缓存)创建装饰器吧,你会发现代码质量立即得到提升。