pythonstringfunctionvariablestimeit

timeit.timeit variable importing in python


I am trying to use timeit.timeit() in order to find how much time it takes to execute a specific line of code. The problem is that this line includes variables and I need to import them somehow, so my question is how? In order to be more clear, the code looks something like this:

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

If I were trying to execute this code in __main__ I would just import the variable directly with 'from __main__ import var1, var2' Any solution for this kind of issue?


Solution

  • timeit.Timer takes a callable as well as a string to eval

    Changed in version 2.6: The stmt and setup parameters can now also take objects that are callable without arguments. This will embed calls to them in a timer function that will then be executed by timeit(). Note that the timing overhead is a little larger in this case because of the extra function calls.

    (also see the source, look for elif hasattr(stmt, '__call__'):).

    Create a closure over the variables and pass it to timeit:

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

    or equivalently:

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