Python中timeit模块如何使用?

文 | 菊子皮(转载请注明出处)

关注公众号:AIAS编程有道

同名B站:AIAS编程有道

环境:Python 3.7,VS Code

timeit模块使用

本部分参考Python3 timeit的用法 以及官方文档

有时候需要测试创建某种变量而花费的时间、有时候需要测试某个函数的运行的时间,对于简单的Python程序使用Python自带timeit模块是不错的选择。

这里也只介绍经常使用的几个方法,更多内容可参考官方文档。Python3中的timeit模块可以用来测试小段代码的运行时间。其中主要通过两个函数来实现:timeit和repeat。

timeit. timeit(stmt=‘pass’, setup=‘pass’, timer=, number=1000000, globals=None)

使用给定语句、 setup 代码和 timer 函数创建一个 Timer 实例,并执行 number 次其 timeit() 方法。可选的 globals 参数指定用于执行代码的命名空间。

timeit.repeat(stmt=‘pass’, setup=‘pass’, timer=, repeat=5, number=1000000, globals=None)

使用给定语句、 setup 代码和 timer 函数创建一个 Timer 实例,并使用给定的 repeat 计数和 number 执行运行其 repeat() 方法。可选的 globals 参数指定用于执行代码的命名空间。

参数说明:

stmt:用于传入要测试时间的代码,可以直接接受字符串的表达式,也可以接受单个变量,也可以接受函数。传入函数时要把函数申明在当前文件中,然后在 stmt = ‘func()’ 执行函数,然后使用 setup = ‘from main import func’

setup:传入stmt的运行环境,比如stmt中使用到的参数、变量,要导入的模块等。可以写一行语句,也可以写多行语句,写多行语句时要用分号;隔开语句。

number:要测试的代码的运行次数,默认100000次,对于耗时的代码,运行太多次会比较慢,此时建议自己修改一下运行次数

repeat:指测试要重复几次,每次的结果构成列表返回,默认5次。

使用案例:

# <1>
print(timeit.timeit(stmt='list(i**2 for i in normal_list)', setup='normal_list=range(10000)', number=10))
# 0.0857056   结果也会与计算机性能有关
# <2>
print(timeit.repeat(stmt='list(i**2 for i in normal_list)', setup='normal_list=range(10000)', repeat=2, number=10))
# [0.08216990000000002, 0.055868999999999974]
# <3> setup 为复合语句
print(timeit.timeit(stmt='list(i**2 for i in normal_list)', setup='a=10000;normal_list=range(a)', number=10))
# 0.0660696
# <4>
print(timeit.repeat(stmt='list(i**2 for i in normal_list)', setup='a=10000;normal_list=range(a)', repeat=2, number=10))
# [0.06270019999999998, 0.054296299999999964]

# <5> 
def func():
    normal_list = range(10000)
    L = [i**2 for i in normal_list]

# stmt为函数
print(timeit.timeit("func()", setup="from __main__ import func", number=10))
# 0.056916100000000025
# <6>
print(timeit.repeat("func()", setup="from __main__ import func", repeat=3, number=10))
# [0.057099300000000075, 0.05018290000000003, 0.04987839999999999]

程序说明:

<1> 运行语句 list(i**2 for i in normal_list) 其中语句的参数为normal_list=range(10000) 一个10次所使用的时间。

<2> 在<1>的基础上,重复运行2次,每次运行的时间都放在一个列表中

<3> 提供参数的语句可以是多个

<4> 在<3>的基础上,重复运行2次,每次运行的时间都放在一个列表中

<5> 使用自定义函数情况

<6> 在<5>的基础上,重复运行3次,每次运行的时间都放在一个列表中


我的订阅号
发布了150 篇原创文章 · 获赞 220 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/meiqi0538/article/details/104324298