在实际问题中,可能会遇到比较解决同一问题的不同方法之间的性能差异。而Python 提供了一个度量工具,为这些问题提供了直接答案。

从查阅资料的情况来看,测试运行时间的调用的模块主要有:time,timeit,datetime,profile 和pstats。其中,profile 和pstats模块提供了针对更大代码块的时间度量工具。以下主要以time,timeit,datetime为例进行说明。

1 time模块测试程序运行时间

在time模块中,计算时间的函数有两个time()和clock()。其中,time(time.time(),time返回的是UTC时间(seconds since the 00:00:00 UTC on January 1)。在很多系统,包括windows下精度很差,win32下的精度只有1/18.2秒。不过在Unix/Linux系统下,time()的精度还是很高的。)time()是计算现实世界的时间,而clock()是cpu 时钟。如果程序计算量不是很大,time()可能无法计算时间,从而导致程序测试失败。而clock()是利用cpu 时钟,时间计算精度较高。对比测试程序如下:

import time
#利用time.clock()计时测试
start_time1 = time.clock()
i = 0
string = 'ILoveFishC.com'
while i < len(string):print(i,  end=' ')i += 1
end_time1 = time.clock()
time1 = end_time1-start_time1
print('\nRunning time1:', time1)
#利用time.time()计时测试
start_time2 = time.time()
i = 0
string = 'ILoveFishC.com'
while i < len(string):print(i,  end=' ')i += 1
end_time2 = time.time()
time2 = end_time2-start_time2
print('\nRunning time2:', time2)

输出结果为:

0 1 2 3 4 5 6 7 8 9 10 11 12 13
Running time1: 3.2431984176475974e-05
0 1 2 3 4 5 6 7 8 9 10 11 12 13
Running time2: 0.0

从中可以看出,time.time()用于测试运行时间是有限的,对于某些较短或运算量不大的程序是无法测量的。

2 timeit模块测试程序运行时间

  • timeit 模块定义了接受两个参数的 Timer 类。两个参数都是字符串。 第一个参数是你要计时的语句或者函数。 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入语句。 从内部讲, timeit 构建起一个独立的虚拟环境, 手工地执行建立语句,然后手工地编译和执行被计时语句。
  • 一旦有了 Timer 对象,最简单的事就是调用 timeit(),它接受一个参数为每个测试中调用被计时语句的次数,默认为一百万次;返回所耗费的秒数。
  • Timer 对象的另一个主要方法是 repeat(), 它接受两个可选参数。 第一个参数是重复整个测试的次数,第二个参数是每个测试中调用被计时语句的次数。 两个参数都是可选的,它们的默认值分别是 3 和 1000000。 repeat() 方法返回以秒记录的每个测试循环的耗时列表。Python 有一个方便的 min 函数可以把输入的列表返回成最小值,如: min(t.repeat(3, 1000000))
  • 你可以在命令行使用 timeit 模块来测试一个已存在的 Python 程序,而不需要修改代码。
from timeit import Timer
print(Timer("sum(range(100))").timeit())

输出结果为:

1.547405913377044

3 datetime模块测试程序运行时间

datetime同样是基于现实时钟的,同样是针对于运算量较大的程序,使用方法如下:
import datetime
def time_1():begin = datetime.datetime.now()sum(range(10000000))end = datetime.datetime.now()time = end - beginreturn timeprint(time_1())

输出结果为:

0:00:00.470582

python程序运行时间的几种分析方法相关推荐

  1. python输出运行时间_分析python程序运行时间的几种方法

    最早见过手写的,类似于下面这种: 1 import datetime 2 3 def time_1(): 4 begin = datetime.datetime.now() 5 sum = 0 6 f ...

  2. python测试代码运行时间_10种检测Python程序运行时间、CPU和内存占用的方法

    在运行复杂的Python程序时,执行时间会很长,这时也许想提高程序的执行效率.但该怎么做呢? 首先,要有个工具能够检测代码中的瓶颈,例如,找到哪一部分执行时间比较长.接着,就针对这一部分进行优化. 同 ...

  3. python记录程序运行时间的三种方法

    这里提供了python记录程序运行时间的三种方法,并附有实现代码,最后进行比较,大家参考下: 方法1 import datetime starttime = datetime.datetime.now ...

  4. Python Lambda函数的几种使用方法

    在进行编程时,一般我们会给一个函数或者变量起一个名字,该名称是用于引用或寻址函数变量.但是有一个低调的函数,你不需要赋予它名字,因此该函数也叫匿名函数.该函数就是Python中的Lambda函数,下面 ...

  5. python中flush怎么用,在Python程序中操作文件之flush()方法的使用教程

    在Python程序中操作文件之flush()方法的使用教程 flush()方法刷新内部缓冲区,像标准输入输出的fflush.这类似文件的对象,无操作. Python关闭时自动刷新文件.但是可能要关闭任 ...

  6. python第三方库安装有哪些要求,python第三方库的四种安装方法

    讲解一下python第三方库的四种安装方法 问题场景 (我的操作系统windows): 我使用pip install selenium 发现先爆出一大段黄色警告日志,最后是两段红色的错误日志,无法成功 ...

  7. python安装第三方库-python第三方库的四种安装方法

    讲解一下python第三方库的四种安装方法 问题场景 (我的操作系统windows): 我使用pip install selenium 发现先爆出一大段黄色警告日志,最后是两段红色的错误日志,无法成功 ...

  8. lopa分析_【风险分析方法】HAZOP、LOPA和FMEA三种分析方法,如何做到信息共享?...

    导 读 信息是人们对事物的了解的不确定性的减少或消除,其功能是表征物质客体成分,结构,状态,特性等属性.信息共享的目的在于减少或消除信息源所需的不确定性.石油化工行业由于设备多,生产过程复杂,危险元素 ...

  9. python比较两个字符串相似度_详解Python 字符串相似性的几种度量方法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...

最新文章

  1. 9大训练营免费开营!阿里云大数据团队的独门绝学全在这了
  2. [BUUCTF-pwn]——铁人三项(第五赛区)_2018_rop
  3. Interactive Report UI - IFrame
  4. TestNG配合ant脚本进行单元测试
  5. ensp桥接云ping不通_谁偷了我的云主机文件?五大场景避坑指南
  6. Java将一个正整数进行因数分解
  7. Jmeter命令行执行并生成HTML报告
  8. Java中的Bean是什么?
  9. 【图像分割】基于matalb灰狼算法最小交叉熵多阈值图像分割【含Matlab源码 903期】
  10. linux模拟http请求命令
  11. wget下载网络资源
  12. 明解C语言第三章习题
  13. how-to-solve-the-specific-problem,learn-this,imitate-this
  14. Android 手机获取Mac地址的方法
  15. public static void main解释
  16. VR酒店上线,数字化转型制定落地方案
  17. php返回值乱码,php中文返回乱码怎么办
  18. xmanager显示linux7桌面,Xmanager 5远程连接CentOS7图形化界面
  19. 腾讯派息式减持京东,“伯克希尔”的投资策略变的逻辑是?
  20. 新唐单片机移植RT-Thread,Finsh组件的接口函数编写

热门文章

  1. Mybatis学习笔记(下)
  2. 浏览器开发工具的秘密
  3. Eth-Trunk(链路聚合)之负载分担模式
  4. 什么是好的数据分析?化繁为简的力量
  5. python手机充值代码_不用框架,原生使用python做注册接口/登陆接口/充值接口的测试,做的数据/代码分离...
  6. [CF1421E]Swedish Heroes
  7. “玉出东方”——汉代错金稀有玉器数字藏品即将发售!
  8. 计算机 布局菜单栏 无法打勾,w7系统 我的电脑工具栏不见了
  9. Unity3D 放大缩小图片
  10. 巨头再度加码区块链,蚂蚁金服发布区块链合作伙伴计划