通过修饰器实现函数运行时间的计算

在之前介绍Python修饰器的几篇文章中,提到修饰器的一种应用场景——计算并打印代码执行时间,如下 runtime 修饰器:

我们使用 runtime 修饰器,对需要关注执行时间函数进行修饰,如下


见 Timeit

Python 内置模块 timeit 模块与 time 模块都可以实现对代码运行时间的计算,但 timeit 模块是专门用来测试代码运行时间的,提供了更多灵活的计算方法,并且相对精度也会更高。

我们先来看一下,同样计算一个函数的运行时间,使用 timeit 如何实现。

不难看出,timeit 还是比较灵活简单的。接下来,我们深入的了解一下 timeit 模块常用的两个函数 。

timeit 函数

创建一个 Timer实例,返回运行 stmt 这段代码 number 遍所用的时间,单位为秒。

语法

参数说明

  • stmt:用于传入要测试时间的代码,可以直接接受字符串的表达式,也可以接受单个变量,也可以接受函数。传入函数时要把函数申明在当前文件中,然后在 stmt = 'func()' 执行函数,然后使用 setup = 'from main import func'。
  • setup:初始化代码或构建环境的导入语句,比如 stmt中使用到的参数、变量,要导入的模块等,多行语句的话,使用分号分隔,同时该语句不计入时间,一般是 from ... import ...
  • timer:计时函数,win32下是time.clock(),linux下是 time.time(),Python的标准库手册推荐在任何系统下都尽量使用 time.clock()
  • number:默认 100000,每一次测量中语句被执行的次数。

示例

执行上述代码,输出结果为:

如果我们只是想计算 com函数里 sum([i 2 for i in rn]) 代码的运行时间,我们可以直接使用 timeit.timeit 方法,上述代码可以调整为:


repeat 函数

创建一个 Timer实例,通过repeat 参数指定重复测试的次数,返回包含每次测试的执行时间的列表,利用这一函数可以很方便得实现多次试验取平均的方法。

语法

参数说明

  • stmt:用于传入要测试时间的代码,可以直接接受字符串的表达式,可以接受单个变量或者函数。传入函数时要把函数申明在当前文件中,然后在 stmt = 'func()' 执行函数,然后使用 setup = 'from main import func'
  • setup:初始化代码或构建环境的导入语句,比如 stmt中使用到的参数、变量,要导入的模块等,多行语句的话,使用分号分隔,同时该语句不计入时间,一般是 from ... import ...
  • timer:计时函数,win32下是 time.clock(),linux下是 time.time(),Python的标准库手册推荐在任何系统下都尽量使用 time.clock()
  • repeat:默认3次,测试要重复几次,每次的结果构成列表返回。
  • number:默认100000次,每一次测量中语句被执行的次数。

示例

执行上述代码,输出结果为:



python3计算运行时间_性能分析之代码运行时间计算——Python timeit 模块 介绍相关推荐

  1. 第09章_性能分析工具的使用

    第09章_性能分析工具的使用 文章目录 1. 数据库服务器的优化步骤 2. 查看系统性能参数 3. 统计SQL的查询成本:last_query_cost 4.定位执行慢的 SQL:慢查询日志 4.1 ...

  2. 计算相机投影矩阵(含代码)(Python)

    计算相机投影矩阵(含代码)(Python) 前几天处理点云时,需要使用到像片与3D点云的对应关系.在这边找了一圈没有发现直接可用的代码,于是去GitHub试了一下,以下是一个提炼后的矩阵计算代码. 下 ...

  3. leip与mysql数据库_性能分析方法 - osc_xm8bu282的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.性能分析的常用手段 1.空间换时间,利用内存缓存从磁盘上取出的数据,CPU可以直接访问内存,从而比从磁盘读取数据更高的效率. 2.时间换空间,当空间成为瓶颈的时候,切开数据分批次处理,用更少空间完 ...

  4. python测试代码性能_使用python timeit 模块检测代码性能

    使用Python 通常在乎的是它的开发效率,而不是运行性能. 但如果通过很简单的方法可以测试出n种不同的写法之间的性能差异,这个过程本身也是一种乐趣. python 自带了timeit 模块,可以在代 ...

  5. 由浅入深探究mysql索引结构原理_性能分析与优化_由浅入深探究mysql索引结构原理、性能分析与优化...

    由浅入深探究mysql索引结构原理.性能分析与优化 第一部分:基础知识第二部分:MYISAM和INNODB索引结构1, 简单介绍B-tree B+ tree树 2, MyisAM索引结构 3, Ann ...

  6. Holt-Winters模型原理分析及代码实现(python)

    引言 最近实验室老师让我去预测景区内代步车辆的投放量,于是乎,本着"一心一意地输出年富力强的劳动力"这份初心,我就屁颠屁颠地去找资料,然后发现了Holt-Winters模型 , 感 ...

  7. 雨棚板弹性法计算简图_造价工程师:钢结构工程量计算注意事项

    造价工程师:钢结构工程量计算注意事项 一.图纸:根据图纸目录,清理核对图纸数量,检查是否有遗漏. 二.建筑施工图 1. 设计总说明 1.1 建筑面积.结构形式.柱距.跨度.结构布置情况: 1.2 工程 ...

  8. Python timeit 模块详解(准确测量小段代码的执行时间)

    timeit 模块详解 -- 准确测量小段代码的执行时间 timeit 模块提供了测量 Python 小段代码执行时间的方法.它既可以在命令行界面直接使用,也可以通过导入模块进行调用.该模块灵活地避开 ...

  9. python timeit模块_如何在Python中使用timeit模块?

    文 | 菊子皮(转载请注明出处) 关注公众号: AIAS编程有道 环境:Python 3.7,VS Code timeit模块使用 有时候需要测试创建某种变量而花费的时间.有时候需要测试某个函数的运行 ...

  10. opencv图像清晰度计算_收藏|分析君带你认识Python中的十大图像处理工具

    当今世界充满了各种数据,而图像是其中高的重要组成部分.然而,若想其有所应用,我们需要对这些图像进行处理.图像处理是分析和操纵数字图像的过程,旨在提高其质量或从中提取一些信息,然后将其用于某些方面. 图 ...

最新文章

  1. WEB技术架构的资源链接。
  2. asp.net MVC的EF与easyui DataGrid数据绑定
  3. Elasticsearch大文件搜索
  4. 西交利物浦计算机专业分数线,西交利物浦大学2018年各省及各专业录取分数线及最低录投档线【理科 文科】...
  5. vba交付图表设计_您是在为交付目的而“设计”吗?
  6. python numpy矩阵索引_python – Numpy中的矩阵索引
  7. Oracle 11g 完全卸载
  8. ARP协议具体解释之Gratuitous ARP(免费ARP)
  9. 戏说前端 JavaScript 之『防抖节流』基础知识
  10. 洛谷 P2804 神秘数字
  11. clang: error: unknown argument: ‘-fpch-deps‘
  12. 矩阵变量的矩阵值函数微分公式 (原创)
  13. 【网络是怎样连接的】—— TCP/IP 传输数据
  14. [内核内存] [arm64] 内存初始化4---bootm_init
  15. 一秒实现免费下载百度文库资料的方法
  16. 无线城域网-无线广域网
  17. 使用gsds绘制基因结构图_基因结构图的绘制
  18. 打开.sql文件的方法
  19. pycharm的安装配置及思维导图
  20. 广州的11个辖区_广州市下辖11个区,其中GDP总值超过3000亿元的分别有哪些?

热门文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第4节 方法引用_4_方法引用_通过super引用父类的...
  2. 商业流程中的traversedpath
  3. VS2013单元测试
  4. Asp.Net MVC4 Bundle捆绑压缩技术
  5. Discuz!NT 在线用户功能简介(转)
  6. DIV+CSS定义及优势
  7. win7用VMware安装CentOs7搭建Linux环境
  8. UVa 10491 - Cows and Cars(全概率)
  9. JAVA作业 17-05-18
  10. 【BZOJ-13361337】Alie最小圆覆盖 最小圆覆盖(随机增量法)