装饰器对代码的特定行而不是整个方法进行计时?

2023-11-23

让我们假设一个简单的方法:

def test_method():
    a = 1
    b = 10000
    c = 20000
    sum1 = sum(range(a,b))
    sum2 = sum(range(b,c))
    return (sum1,sum2)

要使用装饰器计时此方法,一个简单的装饰器将是:

from functools import wraps
def timed_decorator(f):
    @wraps(f)
    def wrapper(*args, **kwds):
        start = time.time()
        result = f(*args, **kwds)
        elapsed = (time.time() - start)*1000
        logger.debug("f::{0} t::{1:0.2f} ms".format(f.__name__, elapsed))
        return result
    return wrapper

现在,如果我想对特定行进行计时test_method说第4行sum1 = sum(range(a,b)),当前的实现涉及内联编码,例如:

 def test_method():
        a = 1
        b = 10000
        c = 20000
        start = time.time()
        sum1 = sum(range(a,b)) # timing specific line or lines
        elapsed = (time.time() - start)*1000
        logger.debug("This part took::{1:0.2f} ms".format(elapsed))
        sum2 = sum(range(b,c))
        return (sum1,sum2)

目的是使用装饰器对特定方法的 M 到 N 行进行时间安排,而不修改方法中的代码。 是否可以使用装饰器注入这样的逻辑?


您可以使用上下文管理器。

import contextlib

@contextlib.contextmanager
def time_measure(ident):
    tstart = time.time()
    yield
    elapsed = time.time() - tstart
    logger.debug("{0}: {1} ms".format(ident, elapsed))

在您的代码中,您可以像这样使用它

with time_measure('test_method:sum1'):
    sum1 = sum(range(a, b))

顺便说一句,如果你想改进你的代码,你可以使用高斯求和公式(解释here) 代替sum(range(a, b)).

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

装饰器对代码的特定行而不是整个方法进行计时? 的相关文章

  • 在 Python 中处理单值元组的最佳实践是什么?

    我正在使用第三方库函数 它从文件中读取一组关键字 并且应该返回一个值的元组 只要有至少两个关键字 它就能正确执行此操作 但是 在只有一个关键字的情况下 它返回一个原始字符串 而不是大小为 1 的元组 这是特别有害的 因为当我尝试做类似的事情
  • Python 3.4.3 tkinter - 程序在声明 IntVar 或任何其他 tkinter 数据类型时冻结

    上一主题 Python 3 4 tkinter checkbutton变量处理不起作用 响应 https stackoverflow com questions 33711472 python 3 4 tkinter checkbutton
  • Python动态导入脚本,需要有其__name__ == "__main__"代码才能被调用

    当从另一个脚本导入 python 脚本时 我想要受经典保护的脚本代码 if name main 要运行 我怎样才能运行该代码 我想做的是从 python 脚本动态更改模块 然后导入现有脚本 该脚本应该看到所做的更改并运行其 main 像Py
  • 对 Python DataFrame 进行子集化

    我正在从 R 过渡到 Python 我刚刚开始使用 Pandas 我有一个可以很好地子集化的 R 代码 k1 lt subset data Product p id Month lt mn Year yr select c Time Pro
  • WTForms 中的小数字段舍入

    我有一个包含价格小数字段的表单 如下所示 from flask ext wtf import Form import wtforms from wtforms validators import DataRequired from deci
  • ValueError:在 R 中使用 keras 模型时在用户代码中

    我正在尝试使用 R 在 R 中运行一维 CNNkeras包裹 我正在使用以下代码 library MASS library keras Create some data data Boston data lt Boston create a
  • numpy 数组最快的保存和加载选项

    我有一个生成二维的脚本numpy数组与dtype float和形状的顺序 1e3 1e6 现在我正在使用np save and np load对数组执行 IO 操作 然而 这些函数对于每个数组都需要几秒钟的时间 是否有更快的方法来保存和加载
  • Python变量赋值问题

    a b 0 1 while b lt 50 print b a b b a b 输出 1 2 4 8 16 32 wheras a b 0 1 while b lt 50 print b a b b a b 输出 正确的斐波那契数列 1 1
  • Python 函数可能会引发哪些异常? [复制]

    这个问题在这里已经有答案了 Python 中有什么方法可以确定 内置 函数可能引发哪些异常 例如 文档 http docs python org lib built in funcs html http docs python org li
  • Python argparse store_true 并将可选选项存储在一个参数中[重复]

    这个问题在这里已经有答案了 我需要识别是否单独给出参数或带有可选字符串或两者都没有 parser add argument options parser parse args so prog py arg 应该存储 进入选项 arg pro
  • 不重复的Python组合

    我有一个数字列表 我想从中进行组合 如果我有清单 t 2 2 2 2 4 c list itertools combinations t 4 结果是 2 2 2 2 2 2 2 4 2 2 2 4 2 2 2 4 2 2 2 4 但我想得到
  • Python3.1中的视图?

    Python3 1中的视图到底是什么 它们的行为方式似乎与迭代器类似 并且它们也可以具体化为列表 迭代器和视图有何不同 据我所知 视图仍然附加到创建它的对象上 对原始对象的修改会影响视图 来自docs http docs python or
  • 尝试修复我的功能

    我正在开发一个函数 我必须返回一个元组 其中第一个参数是最大数字的 str 第二个参数是 int 列表 这是示例以及我为该函数编写的内容 投票 G G N G C G 1 3 0 1 您必须将最大值的位置映射到正确的一方 parties N
  • 如何替换被测模块的文件访问引用

    pyfakefs https code google com p pyfakefs 听起来非常有用 它 最初是作为核心 Python 模块的一个适度的假实现来开发的 以支持中等复杂的文件系统交互 并于 2006 年 9 月在 Google
  • 具有条件的重复行 pandas dataframe python

    我的数据框有问题 我的 df 是 product power brand product 1 3 x 1500W brand A product 2 2x1000W 1x100W product 3 1x1500W 1x500W brand
  • Python 类方法的示例用例是什么?

    我读了Python 中的类方法有什么用 https stackoverflow com questions 38238 what are class methods in python for但那篇文章中的例子很复杂 我正在寻找 Pytho
  • sklearn 中带有词袋和附加情感特征的文本分类器

    我正在尝试构建一个分类器 除了词袋之外 还使用情绪或主题 LDA 结果 等特征 我有一个包含文本和标签的 pandas DataFrame 并且想添加情感值 5 到 5 之间的数字 和 LDA 分析结果 带有句子主题的字符串 我有一个工作词
  • 使用 Pandas 和 Group By 绘制堆叠直方图

    我正在使用如下所示的数据集 Gender Height Width Male 23 4 4 4 Female 45 4 4 5 我想可视化高度和宽度的堆叠直方图 我希望每个图有两个堆叠的直方图 每个性别一个 这是文档中的堆叠直方图 如果存在
  • python pandas如何在多个条件下过滤字符串

    我有以下数据框 import pandas as pd data 5Star FiveStar five star fiv estar data pd DataFrame data columns columnName 当我尝试用一 种条件
  • Python列表问题

    我在使用 python 列表时遇到问题 简化版本是 mylist1 some items in a list mylist2 mylist1 mylist1 pop i mylist insert i item print mylist1

随机推荐

  • 模态对话框不关闭键盘

    我遇到了一个问题 即离开时键盘不会消失UITextField or UITextView in a UIModalPresentationFormSheet 此外 我创建了一个大按钮作为视图的背景 因此如果用户点击字段外部 它就会被触发 我
  • C++ 枚举是有符号的还是无符号的?

    C 枚举是有符号的还是无符号的 通过扩展 通过检查输入是否 您的最小值 假设您从 0 开始并增加 1 来验证输入是否安全 让我们追根溯源 以下是 C 03 标准 ISO IEC 14882 2003 文档 7 2 5 枚举声明 中的内容 枚
  • Android:在没有 Activity 或 Context 引用的情况下访问资源

    我发布这个问题是希望能得到某种明确的答案 如果没有活动或上下文引用 真的不可能访问资源吗 当所需的只是访问一些与 UI 无关的值 资产或字符串时 传递此类引用会导致代码过于复杂 加上所有那些潜在的悬挂参考 这也完全破坏了各种设计模式 例如单
  • 对于 i = 0,为什么 (i += i++) 等于 0?

    获取以下代码 可用作控制台应用程序 static void Main string args int i 0 i i Console WriteLine i Console ReadLine 的结果i是 0 我预计是 2 正如我的一些同事所
  • “异常:t 实例化期间出错!主插座已注册。”在科尔多瓦 Angular2 应用程序中

    我正在用我的项目构建一个简单的科尔多瓦应用程序 它有 2 层嵌套 主路由 gt 子路由 gt 另一个子路由 When trying to browse to the 2nd level another child route 我收到一条错误
  • Chrome 中检测浏览器打印事件有两种不同的方式

    我目前使用的是最新版本的 Chrome 43 0 2357 130 并且在从以下位置调用 print 时遇到打印功能的差异window print 与使用 P 相比 打印时使用window print 它正确输出到控制台 它输出Before
  • WPF FlowDocument - 绝对字符位置

    我有一个 WPF RichTextBox 我正在其中输入一些文本 然后解析整个文本以进行处理 在此解析过程中 我获得了每个单词的开头和结尾的绝对字符位置 我想使用这些字符位置对某些单词应用格式 但是 我发现 FlowDocument 使用
  • 将 Dictionary 转换为匿名对象?

    首先 为了让事情更清楚 我将从顶部解释我的场景 我有一个具有以下签名的方法 public virtual void SendEmail String from List
  • 如何删除包含 GridView 的空 div

    在 ASP NET Gridviews 中生成一个表 该表生成一个父 div 容器 这可能会破坏 CSS 布局 因为无法将样式附加到生成的 div 有没有办法阻止 div 生成或对其应用样式 已询问此问题并标记为已解决here但MS只是说d
  • 在 main() 之外处理 argc 和 argv

    如果我想将用于处理命令行参数的大部分代码保留在 main 之外 以便组织和更具可读性的代码 那么最好的方法是什么 void main int argc char argv lots of code here I would like to
  • 引用没有强名称的程序集

    有没有办法在没有强名称的情况下引用库 当我在引用中添加对程序集的引用并重建解决方案时 一切都很好 但是当我从此程序集解决方案调用该类时 它不会构建 输出表明引用的程序集应该具有强名称 最好的解决方案是什么 强命名库并不可取 我认为您遇到的问
  • Json.Net 可以嵌入到可执行文件中吗?

    我设置了 嵌入互操作类型 属性Netwonsoft Json图书馆到true它返回一个错误 Cannot embed interop types from assembly c path packages Newtonsoft Json 9
  • 在 JSPX 文件中包含 JS 文件(JQuery)

    我正在 Eclipse 中创建一个动态 Web 项目 几乎从头开始 并创建了一个 JSPX 文件 将其放置在 我打算使用Jquery UI 可排序我发现使用 JSPX 只有第一个脚本在 Firefox 和 IE 中加载
  • 如何使用Opencv轮廓单向描述线点

    我正在使用opencvsfindContour找到描述由线 而不是多边形 组成的图像的点 如下所示 cv findContours src contours hierarchy cv RETR EXTERNAL cv CHAIN APPRO
  • 在 javascript 中迭代颜色

    我想列出 css 中使用的所有颜色的列表 但它们似乎以 16 进制格式存储 我认为这样的事情可能会起作用 但它并没有达到我想要的效果 for x x lt 100 x color x toString 16 在 JavaScript 中 您
  • 如何重新启动独立的 Adob​​e Air/Flex 应用程序

    如何让独立的 Adob e Air Flex 应用程序自行重启 它不适用于以下建议的解决方案 http www colettas org p 267 任何帮助都会很棒 Thanks 你好亲爱的我已经修复了 Flex 4 6 的这个方法 pa
  • 日期时间格式如 HH:mm 24 小时,不含 AM/PM

    我在这里搜索关于将 16 20 这样的字符串转换为 DateTime 类型而不丢失格式 我说我不想添加 dd MM yyy 或秒或 AM PM 因为 db 只是接受这种格式 我还尝试过文化 提前致谢 只需为您的日期时间提供日期格式即可 st
  • 如何使用谷歌材料图标作为类而不是 标签

    根据指南中的谷歌材料网站我们必须在 中使用材质图标i 标签 问题是如何将图标添加为很棒的字体 就像是 Class material icons face 代替 i class material icons face i 是的 您可以使用 a
  • Visual C++ 易失性

    Visual C 中 易失性 的 MSDN 文档表明 除了确保读取始终从内存中读取以及写入始终相应地写入之外 写入具有 释放语义 读取具有 获取语义 易失性 的 C 规范包括第二部分 不要进行疯狂的优化 但不包括第一部分 内存栅栏 Visu
  • 装饰器对代码的特定行而不是整个方法进行计时?

    让我们假设一个简单的方法 def test method a 1 b 10000 c 20000 sum1 sum range a b sum2 sum range b c return sum1 sum2 要使用装饰器计时此方法 一个简单