Importación de la variable timeit.timeit en Python

Estoy tratando de usar timeit.timeit para encontrar cuánto tiempo se tarda en ejecutar una línea específica de código. El problema es que esta línea incluye variables y debo importarlas de alguna manera, así que mi pregunta es ¿cómo? Para ser más claros, el código se ve algo así:

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 

Si estuviera intentando ejecutar este código en __main__ , solo importaría la variable directamente con 'from __main__ import var1, var2' Alguna solución para este tipo de problema?

timeit.Timer toma un llamable así como una cadena para evaluar

Modificado en la versión 2.6: Los parámetros stmt y setup ahora también pueden tomar objetos que se pueden llamar sin argumentos. Esto incrustará las llamadas en una función de temporizador que luego será ejecutada por timeit (). Tenga en cuenta que la sobrecarga de tiempo es un poco mayor en este caso debido a las llamadas a funciones adicionales.

(También vea la fuente , busque elif hasattr(stmt, '__call__'): .

Crea un cierre sobre las variables y pásalo a timeit:

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

o equivalente:

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

La respuesta aceptada no funcionó para mí dentro del depurador pdb y un método de clase. La solución que funcionó es agregar las variables a globals() :

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