ePrometeusCorsoLinuxLinux
testi articoli
Testi Articoli  Download
Home | OpenSource | PhpNuke | Programming | SysAdm | 
CorsoJava è ora Video! Free for all!
Clicca Qui!
UNO SGUARDO AL PYTHON
Uno sguardo al Python
Primo impatto
Sequenze e dizionari
Controllo di flusso
Windows e Java
Classi e Oggetti
Istanze
Classi
Ereditarietà
Eccezioni
Esempio: Gestione Form
Conclusioni
L'Autore


<<< Controllo di flusso >>>

Python è un linguaggio imperativo e ha quindi il controllo di flusso usuale, con if, while e for. Un aspetto importante e caratteristico del Python è la modalità di "accorpamento" dei comandi, ovvero come si definiscono i blocchi. I linguaggi tradizionali usano le parentesi: le graffe C e Java, begin-end il Pascal ecceter. Il Python usa l'indentazione per raggruppare gli statementi. Vediamo subito un esempio:

>>> def max(a,b):
... if a>b:
... return a
... else:
... return b
...
>>> max(1,2)
2

I comando if, while, for, def sono composti, quindi devono essere seguite da un blocco, che viene separato dalla condizione con due punti. Il blocco comincia dalla riga successiva e finisce in una indentata quanto la corrente o meno. Visivamente si ha quello che ci si aspetta: tutte le linee seguenti ad un comando composto e più indentate di esso appartengono al blocco di quel comando. Oltre alla sintassi già di per sé abbastanza chiara, questa caratteristica è una marcia in più che contribuisce a rendere i sorgenti in Python estremamente leggibili: quella che prima era solo una norma estetica in Python diventa una regola di programmazione. Come dire che un programma è corretto solo se è anche scritto ordinato! Inoltre, l'uso dell'indentazione elimina molti problemi abbastanza frequenti legati al matching delle parentesi. Infine questo contribuisce a rendere la sintassi minimale, quello che si vuole da un linguaggio di scripting comodo e veloce da usare. Gli elementi del controllo di flusso sono riassunti in tabella 2.

Tabella 2

if <condition>: <block>
[elif <condition>: <block>]*
[else: <block>

Comune If/then/else in Python

while <condition>: <block>
[else: <block>]

Comune While in Python - il blocco in else è eseguito dop la condizione se il ciclo non termina con un break

for <target> in <condition-list>: <block>
[else: <block>]

Itera per ogni elemento della sequenza e lo assegna alla variabile target - il blocco in else è eseguito dopo la condizione se il ciclo non termina con un break

break

Termina un ciclo for o while

continue

Esegue la successiva iterazione di un ciclo for o while

return [<result>]

Ritorna il risultato dalla funzione o metodo corrente - se result è omesso ritorna None

Esaminiamoli uno ad uno.

L'if è il consueto blocco condizionale. L'unica particolarità da notare è che, poichè gli if in cascata risulterebbero sconvenienti da scrivere, per esempio:


>>> if a=1:
... …
... else:
... if a=2:
... …
... else:
... if a=3:
... …
... else:

esiste la clausola elif, per cui l'esempio di sopra può essere scritto più semplicemente e chiaramente in Python come:

>>> if a=1:
... …
... elif a=2:
... …
... elif a=3
... …
... else:
... …

Il ciclo while è simile all'if eccetto che itera il corpo finchè la condizione non è verificata. La particolarità da notare in questo caso è una comoda clausola else che viene eseguita solo quando la condizione diventa falsa. Sono disponibili i comandi break per interrompere il ciclo e continue per continuare il ciclo alla iterazione successiva. Notare che l'else del while (e anche del for che vedremo dopo) non viene eseguito se il ciclo termina con un break. Questo rende agevole scrivere certi cicli in cui si deve distinguere se il ciclo è stato terminato normalmente oppure no. Per esempio, supponiamo di voler cercare una riga in un file per fare dei calcoli, e ritornare il valore speciale None se la riga non è stata trovate nel file. Ecco come si può fare in Python:

>>> while <ci sono righe
file>

... if <trovata la riga>: ... break ... else: ... return None ... <elabora la riga> ... return <la riga elaborata>

Infine il for, che è speciale, nel senso che non è un while compattato come in Java o C. Il for itera su tutti gli elementi di una sequenza:

>>> for i in 'abc': print i, '-',
...
a - b - c -
>>> for i in 1,2,3:
... print i*i
...
1
4
9

Per inciso notiamo la print, che prende i suoi argomenti separati da virgole; se l'ultimo argomento è omesso (notare la virgola senza niente dopo) la print non genera un newline, come fa nel secondo caso. Il for può essere usato sulle stringhe, sulle tuple e anche sulle liste. In Python quindi non c'è un modo esplicito per andare da 6 a 12 a passi di 2, ma occorre appoggiarsi alla funzione range(<inizio>, <fine> [,<passo>]) che costruisce una lista con gli elementi necessari. Quindi questo è il modo corretto per andare da 6 a 12 a passi di due:

>>> for i in range(6,13,2):
... print i,
...
6 8 10 12

Notare che abbiamo usato 13 perchè in un range il limite superiore (12) è escluso.

Python supporta la programmazione ad oggetti in maniera consistente ed elegante, ed ha una libreria di classi piuttosto ampia che copre molte necessità. La dichiarazione delle classi in Python è piuttosto complessa, per cui per motivi di spazio non approfondiremo qui l'argomento ma lo rimandiamo ad un articolo successivo.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com