首页 > 编程语言 >python 计时装饰器@timer 用法及案例

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

时间:2024-12-20 14:55:45浏览次数:5  
标签:函数 python 计时 timer wrapper func time 装饰

在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中非常强大,可以用于日志记录、输入验证、事务处理、缓存等多种场景。

标签:函数,python,计时,timer,wrapper,func,time,装饰
From: https://www.cnblogs.com/wyj497022944/p/18619272

相关文章

  • python 日志装饰器@logexecution 用法及案例
    在Python中,日志装饰器(@logexecution)是一种用于在函数或方法执行前后自动记录日志的装饰器。这种装饰器对于调试、监控和审计代码执行非常有用。下面是一个简单的日志装饰器的实现及其用法案例:日志装饰器实现importloggingimportfunctools#配置日志记录器(可选,但通常建议这......
  • python 重试装饰器@retryonexception 用法及案例
    在Python中,重试装饰器(@retryonexception)是一种用于在函数或方法执行过程中遇到异常时自动重试的装饰器。这种装饰器对于处理可能由于临时问题(如网络延迟、资源争用等)而失败的操作非常有用。下面是一个简单的重试装饰器的实现及其用法案例:重试装饰器实现importtimeimportfunct......
  • python类中 __开头的函数【魔法方法】
    在Python中,魔法方法(MagicMethods)或双下划线方法(DunderMethods)是一类特殊的方法,它们以双下划线(__)开头和结尾。这些方法为对象提供了丰富的功能,允许你定义对象的内置操作行为,如初始化、比较、表示、数学运算等。以下是一些常见的魔法方法及其用途,并附有相应的示例代码。1.初始......
  • python学习——与时间日期相关的方法
    文章目录类方法例子不用考虑闰年了!Python中处理日期和时间的功能主要依赖于datetime模块。类datetime.date:表示日期(年、月、日)的类。datetime.time:表示时间(小时、分钟、秒、微秒)的类。datetime.datetime:表示日期和时间的组合。datetime.timedelta:表......
  • python毕设 基于web的养宠系统的实现程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于宠物管理系统的研究,现有研究主要以宠物领养、销售等传统功能为主。专门针对基于web的综合性养宠系统,涵盖宠物帮遛、遛宠信息等功......
  • 修改python jsonpickle源码, 实现不序列化对象私有成员(3)
    发现之前修改源码后,虽然过滤掉对象的私有成员,但是反序列化的时候,发现生成的对象只有只有公有成员,不包括私有成员.这不是我想要的,因为没有私有成员,对象就不完整了,并且有时候还需要一些私有成员的默认值.所以,还需要再优化一下.修改unpickler.py文件的def_restor......
  • Python旅游信息管理系统v7c4w(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍旅游信息管理系统的现状来进行开发的,具体根据现实的需求来实现旅游信息管理系统网络......
  • Python古玩玉器藏品交易系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍实现了一个古玩玉器交易系统。古玩玉器交易系统的主要用户分为用户、管理员。管理员......
  • python 多版本安装
    当不同的项目需要不同的python版本时,需要安装多个版本的python1.官网下载所有需要的版本:以windows为例:https://www.python.org/downloads/windows/2.安装不同的版本,注意安装路径,默认路径为:C:\Users\Administrator\AppData\Local\Programs\Python......
  • python及pip及pycharm安装
    参考:https://blog.csdn.net/wslejbb/article/details/1379211231、下载pythonhttps://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz2、安装pythonmkdir/usr/local/python3tar-xfPython-3.6.1.tgzcdPython-3.6.1/./configure--prefix=/usr/local/python3make&......