【问题标题】:Python timeit problemPython 时间问题
【发布时间】:2010-10-18 15:49:00
【问题描述】:

我正在尝试使用 timeit 模块,但我不知道如何使用。 我有一个主要的:

from Foo import Foo
if __name__ == '__main__':
...
   foo = Foo(arg1, arg2) 
   t = Timer("foo.runAlgorithm()")
   print t.timeit(2)

我的 Foo 类有一个名为 runAlgorithm() 的方法

错误是这样的:

NameError:未定义全局名称“foo”

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

【问题讨论】:

    标签: python timeit


    【解决方案1】:

    无需使用必要的setup parameter 来设置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))
    

    【讨论】:

    • 我认为无参数需要突出显示
    • 好吧,如果你需要传递参数,你可以简单地使用一个小的包装函数。
    • @SilentGhost:已编辑以包含一个示例 with 参数。
    【解决方案2】:

    docs example 表明你需要通过setup 语句:

    t = Timer("foo.runAlgorithm()", 'from __main__ import foo')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 2015-02-10
      • 2023-04-04
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      相关资源
      最近更新 更多