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

2023-11-12

思路

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_time
            log = "{} 执行耗时: {:.2f} 秒".format(method_name, execution_time)
            print(log)
            return result

        return wrapper

    return 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秒,且使用了装饰器。
在这里插入图片描述

整理不易!

点赞!关注呗!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python使用装饰器记录方法耗时 的相关文章

  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di

随机推荐

  • xxx is not in the sudoers file.This incident will be reported错误

    一 问题解决 在执行sudo命令时会有如下提示 xx is not in the sudoers file This incident will be reported 原因分析 一般这种情况是创建了新用户 没有对应修改sudoers文件或
  • 【文件上传绕过】八、::$DATA上传绕过

    文章目录 一 利用Windows特性 二 源码 三 使用burpsuite抓包在文件后缀加 DATA绕过 一 利用Windows特性 在window的时候如果文件名 DATA 会把 DATA之后的数据当成文件流处理 不会检测后缀名 且保持
  • Myeclipse中Properties文件Unicode码或乱码解决方案

    打开myeclipse的 Window gt Perferences gt General gt Editors gt Context Types 或者 Window gt Perferences gt General gt Context
  • 6. 微积分 - 函数

    Hi 大家好 我是茶桁 经历了前面5节课的基础之后 不知道大家感觉怎么样 我后台接收到了一些反馈 有的同学说比较简单 有的同学说正合适 那有的同学呢 就觉得有些绕 一时之间可能没办法理解和接受 说明小伙伴们的水平呢 还是有一些参差不齐的 那
  • 兔子生兔子的Java解决方式

    最近在学python 其中有这样一道题 古典问题 有一对兔子 从出生后第3个月起每个月都生一对兔子 小兔子长到第三个月后每个月又生一对兔子 假如兔子都不死 问每个月的兔子总数为多少 没有做出来 先用笔在纸上算的时候也是稀里糊涂的 后来想办法
  • python -- opencv获取摄像头时,运行一段时间后突然停止

    问题 在pycharm社区版中 使用opencv获取摄像头时 运行一段时间后 rtsp流突然断开 有概率 断开时报错 websockets exceptions ConnectionClosedError code 1006 connect
  • Spring Boot中解析JSON数据的三种方案

    文章目录 1 JSON简介 2 Spring Boot默认的JSON解析 2 1 使用示例 2 2 修改特定数据的全局JSON格式 2 2 1 自定义MappingJackson2HttpMessageConverter 2 2 2 自定义
  • 假设检验(一):假设检验总体概念

    写在前面的话 最近在学习统计学 这里仅仅是一些学习笔记 方便我自己回顾以及供大家参考 对于统计学我只是初学者 有什么错误之处欢迎大家指出 共同学习 共同进步 一 总体概念 假设检验是一种统计推断方法 其主要用来判断样本与样本 样本与总体之间
  • 使用hiredis实现publish和subscribe

    publish include
  • 提权_Linux提权_suid

    1 MSF连接目标机 生成msf后门 上传到目标机 开启监听 等待运行 gt msfvenom p linux x64 meterpreter reverse tcp LHOST 0 0 0 0 LPORT 6666 i 3 f elf o
  • SylixOS lite Extension工程开发手册

    1 适用范围 本文档介绍了SylixOS Lite版本应用工程的开发流程 适用于使用SylixOS Lite版本开发的相关工程师 2 新建Extension工程 1 选择创建Extension工程 在Project Explorer栏中点击
  • iview表格全选禁止选中设置

    业务需求 表格里面一键全选功能 但是有些数据可能不满足全选的需求 当点击全选时 不满足条件的默认不认其选中 代码如下
  • 微信小程序切片-喝水了关于我们前端制作演示

    微信小程序切片 喝水了关于我们前端制作演示 外部背景的使用 文字识别的使用 复制粘贴设置 边框的设置方法 原始高清播放文件 链接 https pan baidu com s 1nOeOoCj1jfP5rQOg UaQDQ 提取码 32lt
  • Mysql报错 Error querying database. Cause java.sql.SQLSyntaxErrorException

    今天写一个查询功能的时候 出现了一个错误 当我写好后端接口 准备去前端掉用的时候出现了如下错误 Errorqueryingdatabase Cause java sql SQLSyntaxErrorException Youhaveaner
  • leetcode——第55题——跳跃游戏

    题目 给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 class Solution public bool canJump vector
  • XboxOne的kinect在Unity上的开发——开始界面

    好的 欢迎大家来看这个系列的第二部分的内容 这一次呢 我们就直接进入主题 开发切水果游戏本身 这次的切水果的demo呢 我们选择使用ugui来制作 因为ugui相对于NGUI的各种优势 让我们选择了ugui 关于这些呢 大家可以参考我的另一
  • 漏洞扫描是什么?怎么做?

    漏洞扫描 漏洞扫描是指基于漏洞数据库 通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测 发现可利用漏洞的一种安全检测 渗透攻击 行为 漏洞扫描按扫描器所处位置 可分为内网扫描和外网扫描 而按照工作方式 又可以将漏洞扫描分为远
  • 【SpringBoot项目实战】图片压缩包上传、解压、存储等等一套流程教学

    SpringBoot项目实战 图片压缩包上传 解压 存储等等一套流程教学 前言 一 压缩包上传 1 接口实现 2 获取压缩包的文件名和文件路径 二 压缩包解压并保存 1 处理压缩包文件方法 解压缩步骤 2 接口中实现处理压缩包 三 总结 前
  • HTML在工作中的使用

    本文是在学习HTML的时候 心血来潮尝试的做法 纯属瞎玩 不可当真 示例 工作中编辑邮件 在管理系统上进行任务编辑 描述时 都可能会使用到HTML的简单知识 有一些简单的标签可以帮助我们更好的完成工作 比如字体加粗 换行等 比如我在办公系统
  • python使用装饰器记录方法耗时

    思路 python使用修饰器记录方法耗时 目的是每当方法执行完后 可以记录该方法耗时 而不需要在每个方法的执行前后 去创建一个临时变量 来记录耗时 方式一 不推荐 在每个方法的执行前后 去创建一个临时变量 来记录耗时 代码如下 缺点在于 如