Enrico's pages/ 2007/ pygnami/ Python versione Bignami - Iterazione

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