如何使用装饰器来记录函数执行时间?

如何使用装饰器来记录函数执行时间?

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 秒

解释:

  1. profile装饰器接受一个函数作为参数。
  2. 当函数被装饰时,wrapper 函数被创建。
  3. wrapper 函数使用 functools.wraps 来包装原始函数。
  4. wrapper 函数记录函数执行时间,并使用 time.time() 函数获取开始和结束时间。
  5. wrapper 函数打印函数名称、执行时间和执行时间之间的差值。
  6. 运行代码,调用 my_function()
  7. 由于 profile装饰器已注册到 my_function,因此函数执行时间会被记录。

注意:

  • 装饰器只记录函数的执行时间,不会记录函数调用本身的执行时间。
  • 您可以使用 time.time() 函数的 strftime() 方法格式化执行时间。
  • 您可以使用其他装饰器参数来设置装饰器的行为,例如是否打印执行时间。
相似内容
更多>