我想我们都看到timeit
在尝试使用timeit与自定义函数/方法并将参数传递给它时,在ValueError: stmt is neither a string nor callable
之类的东西上失败了。
例如。
1> import timeit
2>
3> def testing(a):
4> for i in range(0, 1000):
5> a + 1
6>
7> print (timeit.timeit(testing(5), number=1000))
如果没有进一步的设置/导入,ValueError: stmt is neither a string nor callable
将失败,因为它无法定位(在我看来,这会扰乱语句)。
因此,剩下的问题是:有什么小的、极简的(甚至可能是"pythonic")的方法来处理这个问题?
我们如何轻松地计时一个代码片段,以便使用pythons timeit
的所有优点来度量执行时间?
发布于 2015-06-06 12:27:40
我发现的一个答案(在我看来是一个不错的答案)是将要调用的函数封装到另一个非参数函数中。当然,这会造成一些开销,并使readability...that陷入混乱,这就是为什么lambdas是解决这一小问题的好方法:
1> import timeit
2>
3> def testing(a):
4> for i in range(0, 1000):
5> a + 1
6>
7> print (timeit.timeit(lambda: testing(5), number=1000))
Output> 0.0097241420746
我们mad唯一的更改是在第7行:与直接调用测试不同,我们用lambda函数包装它。现在,它不必担心未知的参数,因为它得到了一个干净的、包装好的匿名函数。
另一个好处是这个可以在、python2.7.X和python3.x中工作,没有任何更改:)
https://stackoverflow.com/questions/30682846
复制相似问题