Python timeit 问题
我想使用timeit模块,但不知道怎么用。
from Foo import Foo
if __name__ == '__main__':
...
foo = Foo(arg1, arg2)
t = Timer("foo.runAlgorithm()")
print t.timeit(2)
我的类Foo里面有一个叫runAlgorithm()的方法。
我遇到的错误是:
NameError: global name 'foo' is not defined
我哪里做错了?我能从类的方法里获取时间吗?
2 个回答
2
根据文档中的示例,你需要传入一些setup
语句:
t = Timer("foo.runAlgorithm()", 'from __main__ import foo')
16
你可以不使用必要的 setup
参数 来设置 timeit 环境,而是直接传入一个方法(或者任何可以调用的东西):
t = Timer(foo.runAlgorithm)
根据文档的说明:
在 2.6 版本中进行了更改:stmt 和 setup 参数现在也可以接受不带参数的可调用对象。
如果你需要传递一些参数,可以使用函数柯里化,结合 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))