timeit.timeit变量在python中导入

时间:2015-07-21 22:36:27

标签: python string function variables timeit

我正在尝试使用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'直接导入变量 针对此类问题的任何解决方案?

2 个答案:

答案 0 :(得分:6)

timeit.Timer takes a callable以及eval的字符串

  

在2.6版中更改:现在还可以使用stmt和setup参数   获取可以不带参数调用的对象。这将嵌入   在定时器函数中调用它们,然后由它执行   timeit()。请注意,此时的时序开销略大一些   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)

答案 1 :(得分:1)

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

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