在timeit中获取测试返回值

2021年1月7日 / 37次阅读 / Last Modified 2021年1月8日
时间计算

存在这样的测试场景,我们需要测试一系列函数的执行效率,这些函数在测试过程中,有可能失败,函数通过返回值来表示成功或失败,我们的测试代码,需要获取函数在测试执行过程中的返回值。

timeit模块在执行测试代码的时候,是在一个 sub namespace 中,要获取测试函数的返回值,需要一点点技巧。请看如下代码:

>>> def test():
...     import random
...     return random.randint(0,9)
...
>>> from timeit import timeit
>>> a = -1
>>> timeit('a=test()', setup='global a', globals=globals())
0.8676502578891814
>>> a
0
>>> timeit('a=test()', setup='global a', globals=globals())
0.8244221960194409
>>> a
6
>>> timeit('a=test()', setup='global a', globals=globals())
0.8217552551068366
>>> a
5

技巧是,在timeit中,设置setup参数,这部分statement会提前执行,以上示例在setup中申明a变量的来源,就像是在一个函数中,申明对一个全局变量的使用。

如果上述方式不行,比如timeit函数的调用位置在某个函数内部,情况就要复杂一些,可能涉及到locals()函数只读不能写的问题!没搞清楚最终的原因。。。此时,我的测试结果是,使用一个独立的函数来更新涉及的变量(直接用全局变量,我不知道如何能够成功),获取在timeit中调用函数的返回值。

-- EOF --

本文链接:https://www.pynote.net/archives/3091

留言区

您的电子邮箱地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top