A Byte of Python

El bucle for

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.

Ús de la sentència for

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'
				
				

Sortida

				
$ python for.py
1
2
3
4
The for loop is over
				
				

Com funciona

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.

Nota pels programadors de C/C++/Java/C#

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.