Python versione Bignami - Iterazione
Di sequenze
for x in "abcd":
print x
for x in (1, 2, 3):
print x
for x in [1, 2, 3]:
print x
Range di numeri
for x in xrange(10):
# Itera i numeri da 0 a 10 (escluso)
for x in xrange(3, 30):
# Itera i numeri da 3 a 30 (escluso)
for x in xrange(3, 30, 3):
# Itera i numeri da 3 a 30 (escluso) a passi di 3
Di valori generati da funzioni "generatrici"
Una funzione si dice "generatrice" quando genera valori usando il comando
yield
.
def leggi_input():
"Chiede all'utente di inserire i valori in input"
while True:
val = raw_input("Inserisci un valore, enter per terminare > ")
if val == "": return
# Passa il valore al for
yield int(val)
somma = 0
for val in leggi_input():
somma = somma + val
I dizionari hanno alcuni metodi che sono funzioni generatrici:
a = { "gennaio": 1, "febbraio": 2, "marzo": 3 }
for mese in a.iterkeys():
print mese
for numero in a.itervalues():
print numero
for mese, numero in a.iteritems():
print mese, numero
Di oggetti iterabili
Gli oggetti file iterano sulle righe del file:
# Stampa tutti gli username in /etc/passwd
file = open("/etc/passwd")
for line in file:
fields = line.split(":")
print fields[0]
Altri usi dell'iterazione
# Controlla se /etc/passwd contiene una riga vuota
if "\n" in open("/etc/passwd"):
print "/etc/passwd contiene una riga vuota"
# Sostituisce alcuni valori in una lista con dei valori forniti dall'utente
a = [1, 2, 3, 4]
a[2:4] = leggi_input()
# Assegna a delle variabili il risultato di un'iterazione
# (in questo esempio ci sarà un errore se l'utente non inserisce esattamente
# due valori)
a, b = leggi_input()