python 代码运行时间获取方式详解


Posted in Python onSeptember 18, 2020

我们知道为了提高代码的运行速度,我们需要对书写的python代码进行性能测试,而代码性能的高低的直接反馈是电脑运行代码所需要的时间。这里将介绍四种常用的测试代码运行速度的方法。

第一种:使用time模块对代码的运行时间进行统计,代码如下:

import time
class Debug:
  def mainProgram(self):
    start_time = time.time()
    for i in range(100):
      print(i)
    end_time = time.time()
    print(f"the running time is: {end_time - start_time} s")
    

if __name__ == "__main__":
  main = Debug()
  main.mainProgram()

我们采用time 模块给所要测试的代码的前后加上时间戳,一个记为start_time,一个记作end_time,最后代码块的运行时间为end_time-start_time,单位为s(秒)。当然在python中还有许多的记录时间的模块,这里不做过多讨论,均类似于time模块,实现思路上一致,代码实现上大同小异。

第二种:使用IPython的Built-in magic commands,%time,代码如下:

class Debug:
  def mainProgram(self):
    %time for i in range(100): print(i)
    

main = Debug()
main.mainProgram()
"""
Wall time: 1.99 ms
"""

这个类定义是可以去掉的,并不会影响最终的结果,%time 后面加上想要计算时间的代码,然后编译器就会在运行后自动给出所测试代码的运行时间,但是经过测试,%time方法测出的时间并不准确,时间波动范围非常大,这个是很好理解的,因为计算机每时每刻都在处理一些进程,也就是说计算机的运行状态每时每刻都是不同的,所以在不同的时刻测试同一段代码的运行时间也会得到不同的结果。

第三种:用IPython的另一个Built-in magic commands,%timeit,使用方法类似于%time,代码如下:

class Debug:
  def mainProgram(self):
    %timeit for i in range(100): print(i)
    

main = Debug()
main.mainProgram()
"""
8.53 ms ± 452 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
"""

我们可以看到得到的结果是:每个循环8.53 ms±452 µs(平均±标准偏差,共运行7次,每个循环100个)%timeit相比于%time,%timeit会多次执行测试代码,并且会取它们运行时间的平均值,并且还会计算出它们的标准差,因此这种计算方法计算的结果相对于使用%time执行测试代码一次是比较准确的。

第四种:导入timeit模块来计算代码块的执行时间

import timeit

class Debug:
  def mainProgram(self):
    result = timeit.timeit(stmt="for i in range(100): print(i)", number=10)
    print(result)


main = Debug()
main.mainProgram()
"""
0.05363089999991644 s
"""

导入timeit模块后使用timeit.timeit()来测试想要测试的代码,并且代码以string的形式进行输入,并且需要设定number值,设定测试的该段代码需要执行的次数,最终我们得到0.05363089999991644,单位是s(秒),与内置魔法方法%timeit方法不同的是虽然也是多次计算,但是最终获取的时间是n次执行代码所需的总时间而不是执行一次的时间。

至此,代码的运行速度测试方法的介绍暂时告一段落。(以后可能会进一步更新更加全面的),更多相关python 代码运行时间 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中模拟enum枚举类型的5种方法分享
Nov 22 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 Python
使用python实现rsa算法代码
Feb 17 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
python3 配置logging日志类的操作
Apr 08 Python
Python软件包安装的三种常见方法
Jul 07 Python
python判断字符串以什么结尾的实例方法
Sep 18 #Python
python绘制趋势图的示例
Sep 17 #Python
Python绘制组合图的示例
Sep 18 #Python
记一次Django响应超慢的解决过程
Sep 17 #Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 #Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 #Python
PyCharm中关于安装第三方包的三个建议
Sep 17 #Python
You might like
PHP中防止SQL注入实现代码
2011/02/19 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
php中{}大括号是什么意思
2013/12/01 PHP
php教程之phpize使用方法
2014/02/12 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
PHP实现货币换算的方法
2014/11/29 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
Python3进制之间的转换代码实例
2019/08/24 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
python通过cython加密代码
2020/12/11 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
车间班长岗位职责
2013/11/30 职场文书
一名女生的自荐信
2013/12/08 职场文书
个人安全承诺书
2014/05/22 职场文书
励志演讲稿800字
2014/08/21 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL