python 计时装饰器@timer 用法及案例

在Python中,装饰器(decorator)是一种高级功能,它允许你在不修改原有函数或方法定义的情况下,为其添加额外的功能。计时装饰器(@timer)是一个常见的例子,用于测量函数或方法的执行时间。

下面是一个简单的计时装饰器的实现及其用法案例:

计时装饰器实现

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()  # 记录结束时间
        elapsed_time = end_time - start_time  # 计算耗时
        print(f"Function '{func.__name__}' executed in {elapsed_time:.4f} seconds")
        return result  # 返回被装饰函数的执行结果
    return wrapper

用法案例

@timer
def long_running_task():
    # 模拟一个耗时操作
    time.sleep(2)
    print("Task completed!")

# 调用函数
long_running_task()

输出结果

Function 'long_running_task' executed in 2.0010 seconds
Task completed!

解释

  1. 装饰器定义timer 是一个装饰器函数,它接受一个函数 func 作为参数,并返回一个新的函数 wrapper
  2. @wrapswraps 是一个来自 functools 模块的装饰器,用于更新 wrapper 函数的一些元数据,使其看起来更像原始的 func 函数(例如,函数名和文档字符串)。
  3. 记录时间:在 wrapper 函数内部,使用 time.time() 记录函数开始执行和结束执行的时间。
  4. 计算耗时:通过减去开始时间来计算函数执行的耗时。
  5. 打印信息:打印一条消息,显示函数名和执行耗时。
  6. 返回结果:最后,返回被装饰函数的执行结果。

注意事项

  • 装饰器可以应用于任何可调用对象(函数、方法、甚至是另一个装饰器)。
  • 装饰器在函数定义之后、调用之前应用。
  • 如果你的函数接受位置参数、关键字参数、可变参数或默认参数,装饰器应该能够正确处理这些参数(上面的 *args 和 **kwargs 确保了这一点)。
  • 装饰器在Python中非常强大,可以用于日志记录、输入验证、事务处理、缓存等多种场景。
posted @ 2024-12-20 14:44  公子Learningcarer  阅读(15)  评论(0编辑  收藏  举报