如何使用装饰器来记录函数执行时间?
import functools
def profile(func):
"""
使用装饰器记录函数执行时间。
参数:
func (function): 要装饰的函数。
返回:
装饰器。
"""
@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:.6f} 秒")
return result
return wrapper
@profile
def my_function():
# 函数执行的逻辑 here
# 使用装饰器记录函数执行时间
my_function()
运行结果:
函数 my_function 运行时间:0.002 秒
解释:
-
profile
装饰器接受一个函数作为参数。 - 当函数被装饰时,
wrapper
函数被创建。 -
wrapper
函数使用functools.wraps
来包装原始函数。 -
wrapper
函数记录函数执行时间,并使用time.time()
函数获取开始和结束时间。 -
wrapper
函数打印函数名称、执行时间和执行时间之间的差值。 - 运行代码,调用
my_function()
。 - 由于
profile
装饰器已注册到my_function
,因此函数执行时间会被记录。
注意:
- 装饰器只记录函数的执行时间,不会记录函数调用本身的执行时间。
- 您可以使用
time.time()
函数的strftime()
方法格式化执行时间。 - 您可以使用其他装饰器参数来设置装饰器的行为,例如是否打印执行时间。