En Python, no crea una variable adicional en el tipo de situación que describió.
for i in range(10):
Crea un objeto de rango sobre el cual itera el ciclo. El objeto rango mantiene su valor actual en cualquier momento dado. i
es simplemente un nombre creado y vinculado a este valor.
La variable existe ya sea que tenga un nombre o no, ya que el objeto rango debe saber su valor actual.
Si se piensa en un bucle en términos de instrucciones de la CPU, se ve por qué debe ser una variable:
push x
loop:
do something
increment x
jump if x > y
goto loop
No es una instalación en algunos idiomas JIT compilado que a veces detecta un bucle de ser sólo una pequeña cantidad de repeticiones del mismo código y optimiza el código para que sea una serie de las mismas instrucciones. Pero, hasta donde yo sé, Python no hace tal cosa.
Aquí hay un ciclo for en código de bytes:
4 0 SETUP_LOOP 20 (to 23)
3 LOAD_GLOBAL 0 (range)
6 LOAD_FAST 0 (x)
9 CALL_FUNCTION 1
12 GET_ITER
>> 13 FOR_ITER 6 (to 22)
16 STORE_FAST 1 (i)
5 19 JUMP_ABSOLUTE 13
>> 22 POP_BLOCK
en cuenta que no hay comparación. El ciclo se cierra por el objeto de iteración que levanta StopIteration, el intérprete busca la configuración del ciclo y salta al final del ciclo (23 en este caso).
Por supuesto, puede evitar todo esto simplemente repitiendo su código x número de veces. Tan pronto como este número pueda variar, debe haber algún tipo de facilidad para proporcionar next() y StopIteration para que funcione el bucle for. Recuerde, el bucle for de python es en todo caso comparable a un bucle for-each en Java. Realmente no hay un bucle for tradicional disponible en absoluto.
Solo como un lado: Siempre uso i, j y k para iterar variables. Usar el guión bajo de alguna manera me parece poco elegante.
¿Por qué el 'î' en Java que se molestan por innecesaria? –
@ S.Lott No dije que el 'i' no me molesta. Me gusta mejor la sintaxis de Python, como de costumbre. Pero está el hecho de que el 'i' en Java parece usarse, y no me regañan por no usarlo en el ciclo. –
El 'i' puede que no se use realmente. Entonces, ¿es el "regaño"? ¿Ese es el problema? –