当前位置: 首页 > news >正文

python使用装饰器记录方法耗时

思路

python使用修饰器记录方法耗时,目的是每当方法执行完后,可以记录该方法耗时,而不需要在每个方法的执行前后,去创建一个临时变量,来记录耗时。

方式一(不推荐):

在每个方法的执行前后,去创建一个临时变量,来记录耗时,代码如下,缺点在于,如果有10个、100个方法,那不得写10次、100次?且这样去写,容易写漏,而且过于冗余

def fun():# 开始计时start_time = time.time()# 模拟耗时time.sleep(2)# 停止计时end_time = time.time()print("fun01执行喽")

方式二(推荐):

使用装饰器来记录耗时,好处在于,将其标注在需要记录的方法前,这样的做法,相当于将这个方法,传递给另一个方法中。让方法A去执行方法B(俗称:套娃)。
这样的好处在于,我们只需要做标注,不用去改动到需要记录耗时的方法中的内容,这样可以减少出错和冗余,代码如下:

import time
# 使用装饰器,记录方法执行耗时
def timer(method_name):def decorator(func):def wrapper(*args, **kwargs):# 开始计时start_time = time.time()# 执行方法result = func(*args, **kwargs)# 停止计时end_time = time.time()# 统计耗时并输出execution_time = end_time - start_timelog = "{} 执行耗时: {:.2f} 秒".format(method_name, execution_time)print(log)return resultreturn wrapperreturn decorator# 方法1 使用装饰器标注
@timer("fun01()")
def fun01():# 模拟耗时time.sleep(2)print("fun01执行喽")# 方法2 不使用任何标注
def fun02():# 模拟耗时time.sleep(1)print("fun02执行喽")# 方法3 使用装饰器标注
@timer("fun03()")
def fun03():# 模拟耗时time.sleep(3)print("fun03执行喽")# 顺序执行fun01、02和03
fun01()
fun02()
fun03()

代码直接执行,可以看到如下的输出:
1.输出fun01()“执行喽”,却输出耗时是2.01秒,因为这里sleep了2秒,且使用了装饰器。
2.输出fun02()“执行喽”,但未记录执行耗时,原因是这里并未使用“装饰器”记录方法的耗时。
3.输出fun03()“执行喽”,却输出耗时是3.00秒,因为这里sleep了3秒,且使用了装饰器。
在这里插入图片描述

整理不易!

点赞!关注呗!

http://www.lryc.cn/news/122338.html

相关文章:

  • JavaWeb课程学习--Day01
  • Spring Boot单元测试使用MockBean注解向Service注入Mock对象
  • Java中使用instanceof判断对象类型
  • postman测试后端增删改查
  • 根据源码,模拟实现 RabbitMQ - 通过 SQLite + MyBatis 设计数据库(2)
  • 1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡
  • android 如何分析应用的内存(十七)——使用MAT查看Android堆
  • Spring 使用注解储存对象
  • 一、初始 Spring MVC
  • 《爬虫》爬取页面图片并保存
  • 【项目部署】JavaScript解析JSON解析报错Unexpected token xxx is not valid JSON
  • 做接口测试如何上次文件
  • Java SPI机制详解-01
  • 由浅入深C系列六:C中实现字符串trim的功能
  • 博客网站添加复制转载提醒弹窗Html代码
  • ubuntu下nfs服务安装
  • Unity框架学习--2
  • WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS
  • 82. 删除排序链表中的重复元素 II
  • centos 7.x 单用户模式
  • 取证--理论
  • Tik Tok娱乐+电商MCN怎么做?
  • java 自定义xss校验注解实现
  • Selenium图片滑块验证码
  • CAP理论与MongoDB一致性,可用性的一些思考
  • lc2536.子矩阵元素加1
  • C#使用OpenCv(OpenCVSharp)图像全局二值化处理实例
  • Patch SCN一键解决ORA-600 2662故障---惜分飞
  • const、指针、引用的综合
  • gitee linux免密/SSH 方式连接免登录