In questa lezione vedremo più in dettaglio uno degli aspetti fondamentali della programmazione con Python: l'indentazione.
Indentazione e blocchi di codice
A differenza di altri linguaggi che delimitano blocchi di codice con parentesi grafe (come C, C++ e Java) o con parole riservate come begin/end, Python usa l'indentazione. Indentare il codice è una pratica comune in tutti i linguaggi, perché semplifica la lettura del codice e la compresione della sua struttura. Anzichè usare due meccanismi separati per compilatori/interpreti (parentesi o keyword) e persone (indentazione), per Python si è scelto di usare l'indentazione per entrambi. Questa scelta ha diversi aspetti positivi, tra cui:
- il linguaggio risulta più chiaro e leggibile;
- la struttura del programma coincide sempre con quella dell'indentazione;
- lo stile di indentazione è necessariamente uniforme in qualsiasi listato.
Questo significa che, in Python, l'indentazione è significativa, e che indentare in modo incorretto può portare a comportamenti sbagliati del programma o a errori.
Vediamo un semplice esempio. Di seguito usiamo il costrutto if
, che approfondiremo in una lezione successiva.
print("eseguito sempre all'inizio")
if condizione:
print('eseguito in mezzo solo se la condizione è vera')
print('eseguito in mezzo solo se la condizione è vera')
print('eseguito in mezzo solo se la condizione è vera')
print('eseguito sempre alla fine')
In questo esempio possiamo vedere che:
- il primo
print
, l'if
, e l'ultimoprint
hanno lo stesso livello di indentazione, e vengono eseguiti sempre; - dopo l'
if
c'è un blocco di codice con un livello di indentazione maggiore, che include treprint
; - se la condizione dell'
if
è vera, i treprint
vengono eseguiti; - se la condizione dell'
if
è falsa, i treprint
non vengono eseguiti.
È quindi molto importante fare attenzione all’indentazione, perché viene sempre valutata nel processo di parsing del programma. Di seguito è mostrato un esempio di errore dovuto ad una indentazione scorretta:
Convenzioni
Per avere codice più consistente, la Python Software Foundation ha reso disponibile un documento chiamato PEP 8 (acronimo che sta per Python Enhancement Proposal), che raccoglie diverse convenzioni e linee guida.
La PEP 8 include anche una sezione sull'indentazione, che suggerisce tra le altre cose di:
- usare sempre 4 spazi per livello di indentazione;
- evitare l'uso dei caratteri di tabulazione;
- non mischiare mai l'uso di tabulazioni e spazi.
Anche se la PEP 8 suggerisce di seguire queste convenzioni, è possibile (sebbene fortemente sconsigliato) usare tab o un numero diverso di spazi. Fintanto che i livelli di indentazione sono consistenti, il programma comunque funzionerà.
Ci sono tuttavia alcune eccezioni. Se state lavorando su codice che usa una convenzione diversa, è meglio adeguarsi ad essa o, in alternativa, adattare tutto il codice esistente alla PEP 8. Inoltre, è comunque possibile (e talvolta consigliato) usare più o meno spazi per allineare elementi all'interno di una lista, o argomenti all'interno di una chiamata a funzione:
lista = [0, 1, 2, 3, 4,
5, 6, 7, 8, 9]
funzione(arg1, arg2,
arg3, arg4)