Coste de len() en strings

Alvaro Leiva aleivag en udd.cl
Vie Feb 24 16:21:45 CET 2006




El 24/2/06 06:25, "camontuyu" <camontuyu en yahoo.es> escribió:

> 
> Muy interesante esta conversación. Saliendome un poco del tema..., el
> método que acabas de mostrar para medir tiempos se podría hacer con un
> conjunto de instrucciones y funciones???


Si viejo. Por ejemplo

X=""" 
x=4
y=5
z=x*y
"""
from timeit import Timer

Print Timer(X).timeit()

Eso si... Si quieres evaluar el desempeño de una funcion, por ejemplo una
funcion cuadrado te recomiendo:

from timeit import Timer

x="cuadrado(5)"

y="""
def cuadrado(x):
    return x*x
"""

print Timer(x,y).timeit()


Tambien podrias incluir dentro de la variable x la definición de la funcion.
Pero eso no seria muy inteligente ya que timeit tambien mediria cuanto se
demora en definir la funcion, y eso no es lo que uno quiere.

Por ultimo la funcion timeit tiene un defecto. De que los datos que muestra
no son los reales. Lo que hace la clase Timer es simplemente ejecuta una ves
lo que le pases como 2do argumento y luego ejecuta un millon de veces (no me
acuerdo si es un millon o solo mil veces) lo que le pases como primer
argumento, sacando un promedio de cuanto se demoro cada ves que ejecuto el
primer argumento. Pero el promedio que saca es cuando "se ejecutan el
argumento muchas veces seguido" o dicho de otra forma, con gran estress. A
si que no hay que decir la funcion se demora en ejecutarce 0.55 seg, sino
que hay que decir, bajo estress la funcion se demora 0.55 seg.

Para ser mas exactos es mejor no considerar a la funcion timeit como una
funcion que mide el tiempo de ejecucion de algo, sino como algo que
cuantifique el coste de ejecución de algo y que solo es valido cuando se
compara con otra cosa (como por ejemplo cuando comparamos la ejecucion del
len con distintos largos de string). Si esto se puede complementar con un
test de hipotesis de comparacion de medias, ideal....

ATTE

Alvaro




Más información sobre la lista de distribución Python-es