1. 简介

27.5. timeit — Measure execution time of small code snippets

Source code: Lib/timeit.py

timeit模块可以用来测试一段代码的执行耗时,如一个变量赋值语句的执行时间,一个函数的运行时间。

timeit是标准模块,无需安装。

import timeit

1.1. python interface

模块定义了三个方法和一个公共类。

1.1.1. timeit.timeit(stmt='pass', setup='pass', timer=, number=1000000, globals=None)

Create a Timer instance with the given statement, setup code and timer function and run its timeit() method with number executions. The optional globals argument specifies a namespace in which to execute the code.

参数说明:

  • stmt:测试代码,一般用函数(可以用字符串表达式)。
  • setup:传入stmt的运行环境,如参数,变量,模块。
  • timer:
  • number:执行次数,默认1000000
  • globals:

1.1.2. timeit.repeat(stmt='pass', setup='pass', timer=, repeat=3, number=1000000, globals=None)

Create a Timer instance with the given statement, setup code and timer function and run its repeat() method with the given repeat count and number executions. The optional globals argument specifies a namespace in which to execute the code.

参数说明:

  • repeat:重复次数,每次的结果构成列表返回,默认3次。

1.1.3. timeit.default_timer()

The default timer, which is always time.perf_counter().

Changed in version 3.3: time.perf_counter() is now the default timer.

1.1.4. class timeit.Timer(stmt='pass', setup='pass', timer=, globals=None)

Class for timing execution speed of small code snippets.

2. 案例

2.1. timeit() /repeat()

注意事项:

  1. 方法应在setup参数中导入;
  2. 变量需在setup参数中导入,且变量应为全局变量或直接传入;
  3. 测试次数number默认为10**6,注意修改,特别是单次执行时间较长时。
import timeit

def _test_timeit():
global a # timeit
a = [1,2,3,4]
t = timeit.timeit(stmt='_test_2(a)',
setup='from __main__ import _test_2, a',
number=100000)
print(t) # repeat
a = [1,2,3,4]
t = timeit.repeat(stmt='_test_2(a)',
setup='from __main__ import _test_2, a',
number=1000000,
repeat=5 )
print(t) def _test_2(s=None, *ar):
#s.insert(0, 45)
s.append(55) if __name__ == '__main__':
a = None
_test_timeit()
pass

输出:

0.02622983706364665
[0.28630844773090425, 0.2964419925588122, 0.23573263042489412, 0.2578145301438086, 0.22425034115163478]

说明:

repeat()与timeit()的区别在于它会重复测试多次,返回单次执行时间所组成的列表。

2.2. timer()

timer()实质是timeit()和repeat()的底层实现;

def timeit(stmt="pass", setup="pass", timer=default_timer,
number=default_number, globals=None):
"""Convenience function to create Timer object and call timeit method."""
return Timer(stmt, setup, timer, globals).timeit(number) def repeat(stmt="pass", setup="pass", timer=default_timer,
repeat=default_repeat, number=default_number, globals=None):
"""Convenience function to create Timer object and call repeat method."""
return Timer(stmt, setup, timer, globals).repeat(repeat, number)

也可以使用Timer()初始化然后调用其方法timeit和repeat。

python lib timeit 测试运行时间的更多相关文章

  1. C#测试运行时间

    System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start(); //开始监视代码运行时间 ...

  2. python解无忧公主的数学时间编程题001.py

    python解无忧公主的数学时间编程题001.py """ python解无忧公主的数学时间编程题001.py http://mp.weixin.qq.com/s?__b ...

  3. python解无忧公主的数学时间097.py

    python解无忧公主的数学时间097.py """ python解无忧公主的数学时间097.py codegay 2016年3月30日 00:17:26 http:// ...

  4. Python实现进度条和时间预估的示例代码

    一.前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  5. python设置socket的超时时间(可能使用locust压测千级并发的时候要用到,先记录在此)

    在使用urllib或者urllib2时,有可能会等半天资源都下载不下来,可以通过设置socket的超时时间,来控制下载内容时的等待时间. 如下python代码 import socket timeou ...

  6. python之timeit模块

    timeit模块: timeit 模块定义了接受两个参数的 Timer 类.两个参数都是字符串. 第一个参数是你要计时的语句或者函数. 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入 ...

  7. python常用标准库(时间模块 time和datetime)

    常用的标准库 time时间模块 import time time -- 获取本地时间戳 时间戳又被称之为是Unix时间戳,原本是在Unix系统中的计时工具. 它的含义是从1970年1月1日(UTC/G ...

  8. Python学习总结15:时间模块datetime & time & calendar (二)

    二 .datetime模块  1. datetime中常量 1)datetime.MINYEAR,表示datetime所能表示的最小年份,MINYEAR = 1. 2)datetime.MAXYEAR ...

  9. Python学习总结14:时间模块datetime & time & calendar (一)

    Python中的常用于处理时间主要有3个模块datetime模块.time模块和calendar模块. 一.time模块 1. 在Python中表示时间的方式 1)时间戳(timestamp):通常来 ...

随机推荐

  1. [P5490] 【模板】扫描线 - 线段树

    求 \(n\) 个矩形的面积并 Solution 将矩形转化为 \(y_1\) 位置的 + 修改 和 \(y_2\) 位置的 - 修改.然后按照 \(+y\) 顺序依次处理所有的修改,到达的一个新的位 ...

  2. mybatis一级缓存和二级缓存(二)

    注意事项与示例配置 一级缓存 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,一级缓存只是相对于同一个SqlSession而言.所以在参数和SQL完全一样的情况下,我们使用 ...

  3. Pandownload---windows下几乎无敌的网盘下载神器

    近几天光顾着mac了,今天咱来聊聊Windows. 这个就不多说了,直接贴图. 网页版截图. 电脑版截图. 网页版2020.2.1的时候是失效的,别问我为什么不现在测试,用不着. 不用担心不知道密码, ...

  4. RN开发-Linux开发环境搭建(Ubuntu 12.04)

    1.首先安装JDK 2.安装Android开发环境 3.安装node.js 3.1 官网下载 : node-v6.9.1-linux-x64 3.2 添加环境变量 sudo vi /etc/profi ...

  5. 番外:可刷新PDB的管理操作(如何切换PDB Switching Over)

    基于版本:19c (12.2.0.3) AskScuti 主题:可刷新PDB如何进行切换操作 内容说明:本篇延续如何克隆可刷新的PDB(Refreshable PDB)一文,进行切换实验. 具体请参考 ...

  6. android 根据坐标返回触摸到的View

    //根据坐标返回触摸到的Viewprivate View getTouchTarget(View rootView, int x, int y) { View targetView = null; / ...

  7. Oracle登录报错-ORA-00119

    报错 如果配置监听没有问题了,但是连接时又出现ORA-00119问题: ORA-00119: invalid specification for system parameter LOCAL_LIST ...

  8. vue组件插槽与编译作用域

    <!DOCTYPE html> <html> <head> <title></title> </head> <script ...

  9. [CodeIgniter4]故障排除和本地开发服务器

    故障排除 以下是一些常见的安装问题,以及建议的解决方法. 我必须在我的URL中包含index.php 如果``/mypage/find/apple``类似的URL``/index.php/mypage ...

  10. EF CodeFirst数据注解特性详解

    数据注解特性是.NET特性,可以在EF或者EF Core中,应用于实体类上或者属性上,以重写默认的约定规则. 在EF 6和EF Core中,数据注解特性包含在System.ComponentModel ...