我正在尝试使用timeit模块,但我不知道如何使用。 我有一个主要的:
from Foo import Foo
if __name__ == '__main__':
...
foo = Foo(arg1, arg2)
t = Timer("foo.runAlgorithm()")
print t.timeit(2)
我的Class Foo有一个名为runAlgorithm()的方法
错误是这样的:
NameError:未定义全局名称'foo'
我做错了什么? 我可以从课堂方法中抽出时间吗?
答案 0 :(得分:16)
您可以简单地传递方法(或任何可调用的东西),而不是使用必要的setup
parameter来设置timeit环境:
t = Timer(foo.runAlgorithm)
来自文档:
版本2.6中已更改:stmt和setup参数现在也可以使用不带参数的可调用对象。
如果您需要传递一些参数,可以使用函数currying functools.partial
,例如:
class C:
def printargs(self, a, b):
print a, b
from functools import partial
foo = C()
t = Timer(partial(foo.printargs, 1, 2))
答案 1 :(得分:2)
如docs example所示,您需要传递setup
语句:
t = Timer("foo.runAlgorithm()", 'from __main__ import foo')