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()