|
I comandi che abbiamo visto prima sono tipici di altri linguaggi di programmazione. L'unica cosa particolare è la sintassi specifica di Python. È del tutto specifico di Python il ciclo for. Questo particolare costrutto tende a variare dal linguaggio a linguaggio, a seconda delle strutture dati utilizzate in esso. La caratteristica di Python è quella di ciclare sulle sequenze. In particolare data una sequenza,che sia una stringa o una lista, il ciclo effettua una iterazione per ogni elemento. Per esempio consideriamo:
l = ['uno','due','tre']
for i in l:
print i
Il risultato è che vengono stampate le tre stringhe della lista.
La domanda che sorge spontanea a questo punto, è: come si fa a fare un
ciclo numerico banale come quello da 1 a 10? Una risposta potrebbe essere
quella di utilizzare il ciclo while. La logica del Python vuole che sia un
solo modo per far le cose (esattamente al contrario del Perl), e quindi in
generale queste è la via preferenziale. Comunque abbiamo un'altra opzione,
che è quella di generare una lista dei numeri da 1 a 10, e di iterare su di
essa. Questo si ottiene con la funzione range:
for i in range(1O):
print i+1
La funzione range(10) crea una lista i numeri da 0 a 9; infatti il limite
inferiore è zero per default, mentre il numero specificato è il limite
superiore, che non viene raggiunto. Se si vuole ottenere una lista che vada
da 1 a 10 si deve utilizzare range(1,11): estremo inferiore incluso, estremo
superiore escluso.
Quando si fa così occorre fare attenzione che si possono ottemere della
lista molto grandi che occupano memoria. Esiste una funzione chiamata
xrange(), che invece ritorna un "generatore di numeri". Tecnicamente è un
oggetto che si comporta come una sequenza. Utilizzando questo oggetto si
occupa meno memoria, anche se è leggermente più lento. Probabilmente
conviene utilizzare nella maggior parte dei casi range, ricorrendo alla
xrange quando si devono eseguire cicli molto lunghi.
Quando vogliamo possiamo iterare non solo su liste ma anche su tabelle: ovvero le hash map. Però occorre selezionare le chiavi, e accedere a ciascun elemento usandola chiave, come segue (spiegheremo il "%" in seguito):
for i in tel.keys():
print "%s=%d" % (i,tel[i])
Un altro modo di iterare è quello di "snocciolare" gli elementi di una hash map. Utilizzando la funzione items() si ottengono tutti gli elementi della hash map come una lista di tuple:
for k,v in tel.items():
print "%s=%d" % (k,v)
Come si nota si può usare come variabile di controllo una tupla, e il meccanismo è lo stesso dell'appplicane del principio
|