用Python装饰器优雅地为函数计时
在Python中,装饰器是一种强大的工具,它允许我们在不修改原函数代码的情况下,为其添加额外功能。今天,我们来探索如何创建一个简单的性能计时装饰器,这在优化代码时非常有用。
import time
import functools
def timer_decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start_time = time.perf_counter()
result = func(*args, **kwargs)
end_time = time.perf_counter()
print(f"{func.__name__} 执行耗时: {end_time - start_time:.4f}秒")
return result
return wrapper
@timer_decorator
def example_function(n):
"""模拟一个耗时操作"""
sum = 0
for i in range(n):
sum += i
return sum
# 使用装饰后的函数
result = example_function(1000000)
这个装饰器的工作原理很简单:它记录了函数开始和结束的时间,计算并打印出执行耗时。@functools.wraps(func)确保了原始函数的元信息(如函数名、文档字符串)得以保留。
装饰器的优势在于它的可重用性——只需一行@timer_decorator,我们就可以为任何函数添加计时功能,而无需修改其内部逻辑。这种“横切关注点”的分离让代码更加清晰、可维护。
Python的装饰器语法糖让这一切变得优雅而直观。掌握装饰器,不仅能提升代码质量,还能让你写出更Pythonic的程序。