Python timeit 问题

6 投票
2 回答
2881 浏览
提问于 2025-04-16 05:41

我想使用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))

撰写回答