2012-06-04 17 views
11

¿Hay alguna forma de utilizar la función timeit para generar el resultado de la función y el tiempo que tomó procesar al mismo tiempo?Python timeit y salida de programa

En este momento estoy usando

timer = Timer('func()', 'from __main__ import func') 
print timer.timeit(1) 

Pero esto sólo da salida a la vez y no la salida del programa, que devuelve algo en su extremo. Quiero que salga

FuncOutputGoesHere 13.2897528935 

en la misma línea.

Idealmente, me gustaría ser capaz de tomar un promedio del programa mediante la ejecución a N veces y luego emitir el resultado del programa y su promedio de tiempo (un total de una producción global)

+0

Parece que veo mucha desviación entre las personas que recomiendan timeit y las personas que recomiendan time.time(). ¿Cual es mejor? – MyNameIsKhan

+0

'timeit' usa' time.time() ', a menos que esté en Windows, donde usará' time.clock' (más preciso). –

+0

¿Entonces timeit me proporcionará la mayor precisión? – MyNameIsKhan

Respuesta

13

dos opciones:

  1. Incluya 'imprimir' en su código de tiempo. Feo, pero oye

    timer = Timer('print func()', 'from __main__ import func') 
    print timer.timeit(1) 
    
  2. Si todo lo que hacen es ejecutar su función una vez, entonces prescindir del módulo de timeit por completo y la hora del código directamente usando el mismo método:

    import sys 
    import time 
    
    if sys.platform == "win32": 
        # On Windows, the best timer is time.clock() 
        default_timer = time.clock 
    else: 
        # On most other platforms the best timer is time.time() 
        default_timer = time.time 
    
    t0 = default_timer() 
    output = func() 
    t1 = default_timer() 
    print output, t1 - t0 
    

Si desea ejecutar el código varias veces, y produce la salida, ¿por qué no ejecutar el código una vez fuera de la función de tiempo? Lo está llamando más de una vez y ya de todos modos:

timer = Timer('func()', 'from __main__ import func') 
    print timer.timeit(100), 
    print func() 
+0

gracias, esto es muy útil –

0

El módulo timeit ejecuta la instrucción aprobada. Simplemente puede imprimir el resultado de la función:

timer = Timer('print func()', 'from __main__ import func') 
print timer.timeit(1) 
+1

Esto lo imprimirá un millón de veces, o como se ejecute a menudo la sentencia, y también contará la sobrecarga de E/S en los tiempos. – delnan

+0

@delnan: ejecuta timer.timeit (1) ... Haz de eso lo que quieras. :-P –

+0

@MartijnPieters No sé cómo ejecutarlo varias veces sin que salga varias veces; también creo que necesitaría dividir el resultado por el número de tiempos de ejecución porque parece ser agregado. Sería ideal ejecutarlo varias veces para obtener un promedio y una salida una vez. – MyNameIsKhan

Cuestiones relacionadas