2015-07-21 18 views
5

Sto provando ad usare timeit.timeit per trovare quanto tempo ci vuole per esecare una specifica linea di codice. Il problema è che questa riga include variabili e ho bisogno di importarle in qualche modo, quindi la mia domanda è come? Per essere più chiaro, il codice sembra qualcosa di simile:timeit.timeit variabile che importa in python

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 

Se stessi cercando di execture questo codice in __main__ vorrei solo importare la variabile direttamente con 'from __main__ import var1, var2' Qualsiasi soluzione per questo tipo di problema?

+0

timeit serve per misurare un blocco di codice isolato. Guarda questa risposta: http://stackoverflow.com/questions/2327719/timing-block-of-code-in-python-without-putting-it-in-a-function – Krumelur

+0

@Krumelur Non sono sicuro di questa soluzione funzionerà per me, sto cercando qualcosa di un po 'diverso. C'è qualche altro modo? – pystudent

risposta

4

timeit.Timertakes a callable così come una stringa di EVAL

Modificato nella versione 2.6: Lo stmt e impostazione parametri possono anche prendere oggetti che sono richiamabili senza argomenti. Ciò incorpora le chiamate in una funzione timer che verrà quindi eseguita da timeit(). Si noti che l'overhead di temporizzazione è un po 'più grande in questo caso a causa delle chiamate di funzione extra.

(vedere anche source, cercare elif hasattr(stmt, '__call__'):).

Creare una chiusura sopra le variabili e passarlo a timeit:

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

o equivalentemente:

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

La risposta accettata non ha funzionato per me dentro pdb debugger e un metodo di classe. La soluzione che ha funzionato è aggiungere le variabili a globals():

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