Fork me on GitHub

Python标准库timeit的使用简介

目录

  • 背景

  • 第一部分 模块介绍

  • 参考文献及资料

背景

Python调试代码时,经常需要测算一些代码模块或函数的执行效率(即耗时)。常用手段会在代码前后分别用time.time()记下开始和结束的时间,然后相减获得执行耗时。

本篇博客是一篇学习笔记,介绍Python一个内置模块实现代码执行计时。

第一部分 模块介绍

  • timeit属于Python的标准库。文件路径在~Lib/timeit.py。
  • timeit同时具有命令行接口可调用的函数接口

一、命令行接口

1、案例

1
2
>>>python -m timeit '"-".join(str(n) for n in range(100))
>>>100000 loops, best of 3: 14.1 usec per loop

回显内容:语句"-".join(str(n) for n in range(100)执行了10w次,平均耗时14.1 usec。

2、接口参数说明

1
2
3
4
5
6
7
8
9
python -m timeit [-n N] [-r N] [-s S] [-t] [-c] [-h] [statement ...]

#[-n N] 表示测试语句(statement)执行的次数。如果不指定,会连续执行10,100,1000,...即10的倍数次,直到总时间至少0.2秒,结束。
#[-r N] 计数器重复次数。默认是3。返回一个list,记录每次耗时。
#[-s S] statement之前前的初始化语句。默认为pass。
#[-t] 使用time.time()。
#[-c] 使用time.clock()。
#[-v] 会输出更多的执行过程信息。10次的耗时,1000次耗时,等等
#[-h] 单独使用,反馈接口的使用信息。

注意:statement和[-s S]的参数按照字符串的形式传入。

二、函数接口

1、类timeit.Timer

  • 案例
1
2
3
4
5
6
7
8
9
import timeit
#定义一个类
t=timeit.Timer('char in text',setup='text="sample string";char="g"')
#timeit()函数
t.timeit()
#回显:0.019882534000089436
#repeat()函数
t.repeat()
#回显:[0.01990252700011297, 0.01574616299990339, 0.015739961000008407]
  • 参数说明
1
2
3
4
5
6
#1、初始化一个Timer类的参数:
timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)
#2、timeit(number=1000000)
# 默认number执行100w次。
#3、repeat(repeat=3,number=1000000)
# 默认执行100w次,重复3次(返回list)

2、两个函数

  • 类似Timer的类,timeit也有两个函数。
1
2
3
4
5
6
7
#1、timeit函数
timeit.timeit(stmt="pass", setup="pass", timer=default_timer,number=default_number)
#参数说明:stmt即statement,重复执行的语句。setup即执行前的初始化语句(执行一次)。

#2、repeat函数
timeit.repeat(stmt='pass', setup='pass', timer=<default timer>, repeat=3, number=1000000)
#类似Timer类中函数。
  • 案例
1
2
3
4
5
6
7
import timeit
def test_example():
for i in range(100):
"-".join(str(i))
if __name__ == '__main__':
print(timeit.timeit("test_example()", setup="from __main__ import test_example"))
#25.844697911000367

例子中statement是个函数,重复执行前需要在setup中提前import。

参考文献及资料

本文标题:Python标准库timeit的使用简介

文章作者:rong xiang

发布时间:2018年01月25日 - 19:01

最后更新:2022年10月25日 - 23:10

原始链接:https://zjrongxiang.github.io/posts/eb968840/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%