El otro día estaba haciendo una evaluación comparativa de Python y me encontré con algo interesante. A continuación hay dos bucles que hacen más o menos lo mismo. El bucle 1 tarda aproximadamente el doble que el bucle 2 en ejecutarse.¿Por qué el bucle en range() en Python es más rápido que usar un bucle while?
Loop 1:
int i = 0
while i < 100000000:
i += 1
Loop 2:
for n in range(0,100000000):
pass
¿Por qué el primer bucle de manera mucho más lenta? Sé que es un ejemplo trivial, pero despertó mi interés. ¿Hay algo especial acerca de la función range() que lo hace más eficiente que incrementar una variable de la misma manera?
+1 para explicar una respuesta con un desmontaje – TwentyMiles
En realidad, el cuerpo del bucle en el primer desmontaje tiene 10 operaciones (el salto de la posición 32 a 9).En la implementación actual de CPython, la interpretación de cada bytecode resulta con una probabilidad bastante alta en una costosa derivación incorrecta de la rama indirecta en la CPU (el salto a la implementación del siguiente bytecode). Esto es una consecuencia de la implementación actual de CPython, los JITs implementados por tragamonedas en vacío, PyPy y otros probablemente perderán esa sobrecarga. Los mejores de ellos también podrán hacer una especialización de tipo para un orden de magnitud de aceleración. –
+1 - @kcwu: ¿cómo lo desarmaste? –