7. Istruzioni composte

Le istruzioni composte contengono (gruppi di) altre istruzioni; influenzano o controllano in qualche modo l'esecuzione di queste altre istruzioni. In generale, le istruzioni composte durano per molte righe, sebbene in semplici forme un'istruzione composta completa possa essere contenuta in una sola riga.

Le istruzioni if, while e for implementano costrutti tradizionali di controllo di flusso. try specifici gestori per eccezioni e/o codice più pulito per un gruppo di istruzioni. Anche le funzioni e le definizioni di classe sono istruzioni composte.

Le dichiarazioni composte consistono in una o più 'clausole'. Una clausola consiste di un'intestazione e di una 'suite'. Le clausole d'intestazione di una particolare istruzione composta sono tutte allo stesso livello di indentazione. Ogni clausola d'intestazione inizia con una parola chiave identificabile univocamente e finisce con il carattere due punti. Una suite è un gruppo di istruzioni controllate da una clausola. Una suite può essere composta da una o più semplici istruzioni poste sulla stessa riga dell'intestazione, separate da un carattere due punti, seguendo i due punti dell'intestazione, o può essere composta da una o più istruzioni indentate sulle righe susseguenti. Solo l'ultima forma di composizione della suite può contenere istruzioni composte; quello che segue è illegale, principalmente perché non sarebbe chiaro a quale clausola if e seguente clausola else dovrebbe appartenere:

if test1: if test2: print x

Si noti anche che i due punti uniscono in modo più costrittivo che il punto in questo contesto, così come quello nel seguente esempio, una, tutte o nessuna delle istruzioni print stampate viene eseguita:

if x < y < z: print x; print y; print z

Riassumendo:

compound_stmt  ::=  if_stmt
    | while_stmt
    | for_stmt
    | try_stmt
    | funcdef
    | classdef
suite  ::=  stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
statement  ::=  stmt_list NEWLINE | compound_stmt
stmt_list  ::=  simple_stmt (";" simple_stmt)* [";"]
Potete scaricare il file originale (in Inglese) come testo.

Si noti che l'istruzione finisce sempre con una NEWLINE seguita possibilmente da una DEDENT . Si noti anche che pure la clausola facoltativa continuativa, inizia con una parola chiave che non può avviare un'istruzione, così non vi sono ambiguità (il problema dell'''else pendente'', risolto in Python dalla richiesta di annidamento dell'istruzione if che è indentata).

La formattazione delle regole grammaticali nella seguente sezione mette ogni clausola in una riga separata, per chiarezza.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.