【问题标题】:timeit.timeit variable importing in python在python中导入timeit.timeit变量
【发布时间】:2015-10-11 14:27:31
【问题描述】:

我正在尝试使用 timeit.timeit 来查找执行特定代码行所需的时间。 问题是这一行包含变量,我需要以某种方式导入它们,所以我的问题是如何? 为了更清楚,代码看起来像这样:

def func():
    var1 = 'aaa'
    var2 = 'aab'
    t1 = timeit.timeit('var1==var2', 'from __main__ import ___', number = 10**4) #  here I'm missing what to put after the import

如果我试图在__main__ 中执行此代码,我将直接使用'from __main__ import var1, var2' 导入变量 这类问题有什么解决办法吗?

【问题讨论】:

    标签: python string function variables timeit


    【解决方案1】:

    timeit.Timertakes a callable 以及一个要评估的字符串

    在 2.6 版中更改: stmt 和 setup 参数现在也可以 获取可以不带参数调用的对象。这将嵌入 在计时器函数中调用它们,然后由 时间()。请注意,这里的时序开销稍大一些 case 因为额外的函数调用。

    (另见source,查找elif hasattr(stmt, '__call__'):)。

    在变量上创建一个闭包并将其传递给 timeit:

    def func():
        var1 = 'aaa'
        var2 = 'aab'
        t1 = timeit.timeit(lambda: var1 == var2, number = 10**4)
    

    或等效:

    def func():
        var1 = 'aaa'
        var2 = 'aab'
        def closure():
            return var1 == var2
        t1 = timeit.timeit(closure, number = 10**4)
    

    【讨论】:

      【解决方案2】:

      pdb 调试器和类方法中,接受的答案对我不起作用。有效的解决方案是将变量添加到globals()

      globals()['var1'] = var1
      globals()['var2'] = var2
      timeit.timeit(lambda: var1 == var2, number = 10**4)
      

      【讨论】:

      • 我真的很喜欢这个解决方案。
      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 2011-10-04
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 2014-10-02
      相关资源
      最近更新 更多