Python timeit问题

时间:2010-10-18 15:49:00

标签: python timeit

我正在尝试使用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'

我做错了什么? 我可以从课堂方法中抽出时间吗?

2 个答案:

答案 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')