|
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.
|