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)* [";"] |
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.