La sentència for..in
és una altra de les sentències de bucle.
En aquest cas itera sobre una seqüència d'objectes, és a dir,
tracta cada element d'una seqüència.
Més endavant veurem les seqüències en detall.
De moment, tenim prou amb saber que una seqüència és simplement un conjunt
ordenat d'elements.
Example 6.3. Ús de la sentència for
#!/usr/bin/python # Filename: for.py for i in range(1, 5): print i else: print 'The for loop is over'
Aquest programa escriu una seqüència de números
que generem fent servir la funció integrada range
.
Bàsicament, passem dos números a la funció range
i
aquesta ens retorna una seqüència de números que comença amb el primer
número que li passem i finalitza al darrer número.
Per exemple, range(1,5)
ens construeix la seqüència
[1, 2, 3, 4]
.
Per defecte, range
incrementa de un en un. Podem, però,
passar-li un tercer número indicant-li el valor de salt entre elements.
Per exemple, range(1,5,2)
ens retorna [1,3]
.
Recordem que el rang arriba fins al segon número sense
incloure'l.
A continuació, el bucle for
itera sobre el rang
for i in range(1,5)
o, el que és equivalent,
for i in [1, 2, 3, 4]
.
Ho podem veure com si assignéssim, un per un, cada número (o objecte) de la
seqüència a i
, i a continuació executéssim el bloc de sentències
per cada valor que pren i
.
En aquest cas, el bloc del bucle simplement escriu el valor de la variable.
Recordem que la part else
és opcional. Quan s'inclou, és executada
un cop finalitzada completament l'execució del bucle for
, excepte
si s'executa la sentència break.
Recordem que el bucle for..in
funciona per qualsevol seqüència.
A l'exemple, la seqüència és un rang de números construït amb la funció
range
, però es pot iterar amb seqüències de qualsevol tipus
d'objecte!
Més endavant estudiarem aquesta idea.
El bucle for
de Python és radicalment diferent al
de C/C++. Els programadors de C# notaran que el for
de Python és similar al foreach
. Els programadors de
Java el trobaran similar al for (int i : IntArray)
del Java 1.5 .
Podem traduir for (int i = 0; i < 5; i++)
de
C/C++ com for i in range(0,5)
. El bucle queda d'aquesta
manera més simple, més expressiu i amb menys possibilitats d'error.