\chapter{Compound statements}
\indexii{compound}{statement}

Compound statements contain (groups of) other statements; they affect
or control the execution of those other statements in some way.  In
general, compound statements span multiple lines, although in simple
incarnations a whole compound statement may be contained in one line.

The \verb\if\, \verb\while\ and \verb\for\ statements implement
traditional control flow constructs.  \verb\try\ specifies exception
handlers and/or cleanup code for a group of statements.  Function and
class definitions are also syntactically compound statements.

Compound statements consist of one or more `clauses'.  A clause
consists of a header and a `suite'.  The clause headers of a
particular compound statement are all at the same indentation level.
Each clause header begins with a uniquely identifying keyword and ends
with a colon.  A suite is a group of statements controlled by a
clause.  A suite can be one or more semicolon-separated simple
statements on the same line as the header, following the header's
colon, or it can be one or more indented statements on subsequent
lines.  Only the latter form of suite can contain nested compound
statements; the following is illegal, mostly because it wouldn't be
clear to which \verb\if\ clause a following \verb\else\ clause would
belong:
\index{clause}
\index{suite}

\begin{verbatim}
if test1: if test2: print x
\end{verbatim}

Also note that the semicolon binds tighter than the colon in this
context, so that in the following example, either all or none of the
\verb\print\ statements are executed:

\begin{verbatim}
if x < y < z: print x; print y; print z
\end{verbatim}

Summarizing:

\begin{verbatim}
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)* [";"]
\end{verbatim}

Note that statements always end in a \verb\NEWLINE\ possibly followed
by a \verb\DEDENT\.
\index{NEWLINE token}
\index{DEDENT token}

Also note that optional continuation clauses always begin with a
keyword that cannot start a statement, thus there are no ambiguities
(the `dangling \verb\else\' problem is solved in Python by requiring
nested \verb\if\ statements to be indented).
\indexii{dangling}{else}

The formatting of the grammar rules in the following sections places
each clause on a separate line for clarity.

\section{The {\tt if} statement}
\stindex{if}

The \verb\if\ statement is used for conditional execution:

\begin{verbatim}
if_stmt:        "if" condition ":" suite
               ("elif" condition ":" suite)*
               ["else" ":" suite]
\end{verbatim}

It selects exactly one of the suites by evaluating the conditions one
by one until one is found to be true (see section \ref{Booleans} for
the definition of true and false); then that suite is executed (and no
other part of the \verb\if\ statement is executed or evaluated).  If
all conditions are false, the suite of the \verb\else\ clause, if
present, is executed.
\kwindex{elif}
\kwindex{else}

\section{The {\tt while} statement}
\stindex{while}
\indexii{loop}{statement}

The \verb\while\ statement is used for repeated execution as long as a
condition is true:

\begin{verbatim}
while_stmt:     "while" condition ":" suite
               ["else" ":" suite]
\end{verbatim}

This repeatedly tests the condition and, if it is true, executes the
first suite; if the condition is false (which may be the first time it
is tested) the suite of the \verb\else\ clause, if present, is
executed and the loop terminates.
\kwindex{else}

A \verb\break\ statement executed in the first suite terminates the
loop without executing the \verb\else\ clause's suite.  A
\verb\continue\ statement executed in the first suite skips the rest
of the suite and goes back to testing the condition.
\stindex{break}
\stindex{continue}

\section{The {\tt for} statement}
\stindex{for}
\indexii{loop}{statement}

The \verb\for\ statement is used to iterate over the elements of a
sequence (string, tuple or list):
\obindex{sequence}

\begin{verbatim}
for_stmt:       "for" target_list "in" condition_list ":" suite
               ["else" ":" suite]
\end{verbatim}

The condition list is evaluated once; it should yield a sequence.  The
suite is then executed once for each item in the sequence, in the
order of ascending indices.  Each item in turn is assigned to the
target list using the standard rules for assignments, and then the
suite is executed.  When the items are exhausted (which is immediately
when the sequence is empty), the suite in the \verb\else\ clause, if
present, is executed, and the loop terminates.
\kwindex{in}
\kwindex{else}
\indexii{target}{list}

A \verb\break\ statement executed in the first suite terminates the
loop without executing the \verb\else\ clause's suite.  A
\verb\continue\ statement executed in the first suite skips the rest
of the suite and continues with the next item, or with the \verb\else\
clause if there was no next item.
\stindex{break}
\stindex{continue}

The suite may assign to the variable(s) in the target list; this does
not affect the next item assigned to it.

The target list is not deleted when the loop is finished, but if the
sequence is empty, it will not have been assigned to at all by the
loop.

Hint: the built-in function \verb\range()\ returns a sequence of
integers suitable to emulate the effect of Pascal's \verb\for i := a
to b do\; e.g. \verb\range(3)\ returns the list \verb\[0, 1, 2]\.
\bifuncindex{range}
\index{Pascal}

{\bf Warning:} There is a subtlety when the sequence is being modified
by the loop (this can only occur for mutable sequences, i.e. lists).
An internal counter is used to keep track of which item is used next,
and this is incremented on each iteration.  When this counter has
reached the length of the sequence the loop terminates.  This means that
if the suite deletes the current (or a previous) item from the
sequence, the next item will be skipped (since it gets the index of
the current item which has already been treated).  Likewise, if the
suite inserts an item in the sequence before the current item, the
current item will be treated again the next time through the loop.
This can lead to nasty bugs that can be avoided by making a temporary
copy using a slice of the whole sequence, e.g.
\index{loop!over mutable sequence}
\index{mutable sequence!loop over}

\begin{verbatim}
for x in a[:]:
    if x < 0: a.remove(x)
\end{verbatim}

\section{The {\tt try} statement}
\stindex{try}

The \verb\try\ statement specifies exception handlers and/or cleanup
code for a group of statements:

\begin{verbatim}
try_stmt:       try_exc_stmt | try_fin_stmt
try_exc_stmt:   "try" ":" suite
               ("except" [condition ["," target]] ":" suite)+
try_fin_stmt:   "try" ":" suite
               "finally" ":" suite
\end{verbatim}

There are two forms of \verb\try\ statement: \verb\try...except\ and
\verb\try...finally\.  These forms cannot be mixed.

The \verb\try...except\ form specifies one or more exception handlers
(the \verb\except\ clauses).  When no exception occurs in the
\verb\try\ clause, no exception handler is executed.  When an
exception occurs in the \verb\try\ suite, a search for an exception
handler is started.  This inspects the except clauses in turn until
one is found that matches the exception.  A condition-less except
clause, if present, must be last; it matches any exception.  For an
except clause with a condition, that condition is evaluated, and the
clause matches the exception if the resulting object is ``compatible''
with the exception.  An object is compatible with an exception if it
is either the object that identifies the exception or it is a tuple
containing an item that is compatible with the exception.  Note that
the object identities must match, i.e. it must be the same object, not
just an object with the same value.
\kwindex{except}

If no except clause matches the exception, the search for an exception
handler continues in the surrounding code and on the invocation stack.

If the evaluation of a condition in the header of an except clause
raises an exception, the original search for a handler is cancelled
and a search starts for the new exception in the surrounding code and
on the call stack (it is treated as if the entire \verb\try\ statement
raised the exception).

When a matching except clause is found, the exception's parameter is
assigned to the target specified in that except clause, if present,
and the except clause's suite is executed.  When the end of this suite
is reached, execution continues normally after the entire try
statement.  (This means that if two nested handlers exist for the same
exception, and the exception occurs in the try clause of the inner
handler, the outer handler will not handle the exception.)

The \verb\try...finally\ form specifies a `cleanup' handler.  The
\verb\try\ clause is executed.  When no exception occurs, the
\verb\finally\ clause is executed.  When an exception occurs in the
\verb\try\ clause, the exception is temporarily saved, the
\verb\finally\ clause is executed, and then the saved exception is
re-raised.  If the \verb\finally\ clause raises another exception or
executes a \verb\return\, \verb\break\ or \verb\continue\ statement,
the saved exception is lost.
\kwindex{finally}

When a \verb\return\ or \verb\break\ statement is executed in the
\verb\try\ suite of a \verb\try...finally\ statement, the
\verb\finally\ clause is also executed `on the way out'.  A
\verb\continue\ statement is illegal in the \verb\try\ clause.  (The
reason is a problem with the current implementation --- this
restriction may be lifted in the future).
\stindex{return}
\stindex{break}
\stindex{continue}

\section{Function definitions} \label{function}
\indexii{function}{definition}

A function definition defines a user-defined function object (see
section \ref{types}):
\obindex{user-defined function}
\obindex{function}

\begin{verbatim}
funcdef:        "def" funcname "(" [parameter_list] ")" ":" suite
parameter_list: (parameter ",")* ("*" identifier | parameter [","])
sublist:        parameter ("," parameter)* [","]
parameter:      identifier | "(" sublist ")"
funcname:       identifier
\end{verbatim}

A function definition is an executable statement.  Its execution binds
the function name in the current local name space to a function object
(a wrapper around the executable code for the function).  This
function object contains a reference to the current global name space
as the global name space to be used when the function is called.
\indexii{function}{name}
\indexii{name}{binding}

The function definition does not execute the function body; this gets
executed only when the function is called.

Function call semantics are described in section \ref{calls}.  When a
user-defined function is called, the arguments (a.k.a. actual
parameters) are bound to the (formal) parameters, as follows:
\indexii{function}{call}
\indexiii{user-defined}{function}{call}
\index{parameter}
\index{argument}
\indexii{parameter}{formal}
\indexii{parameter}{actual}

\begin{itemize}

\item
If there are no formal parameters, there must be no arguments.

\item
If the formal parameter list does not end in a star followed by an
identifier, there must be exactly as many arguments as there are
parameters in the formal parameter list (at the top level); the
arguments are assigned to the formal parameters one by one.  Note that
the presence or absence of a trailing comma at the top level in either
the formal or the actual parameter list makes no difference.  The
assignment to a formal parameter is performed as if the parameter
occurs on the left hand side of an assignment statement whose right
hand side's value is that of the argument.

\item
If the formal parameter list ends in a star followed by an identifier,
preceded by zero or more comma-followed parameters, there must be at
least as many arguments as there are parameters preceding the star.
Call this number {\em N}.  The first {\em N} arguments are assigned to
the corresponding formal parameters in the way descibed above.  A
tuple containing the remaining arguments, if any, is then assigned to
the identifier following the star.  This variable will always be a
tuple: if there are no extra arguments, its value is \verb\()\, if
there is just one extra argument, it is a singleton tuple.
\indexii{variable length}{parameter list}

\end{itemize}

Note that the `variable length parameter list' feature only works at
the top level of the parameter list; individual parameters use a model
corresponding more closely to that of ordinary assignment.  While the
latter model is generally preferable, because of the greater type
safety it offers (wrong-sized tuples aren't silently mistreated),
variable length parameter lists are a sufficiently accepted practice
in most programming languages that a compromise has been worked out.
(And anyway, assignment has no equivalent for empty argument lists.)

\section{Class definitions} \label{class}
\indexii{class}{definition}

A class definition defines a class object (see section \ref{types}):
\obindex{class}

\begin{verbatim}
classdef:       "class" classname [inheritance] ":" suite
inheritance:    "(" [condition_list] ")"
classname:      identifier
\end{verbatim}

A class definition is an executable statement.  It first evaluates the
inheritance list, if present.  Each item in the inheritance list
should evaluate to a class object.  The class's suite is then executed
in a new execution frame (see section \ref{execframes}), using a newly
created local name space and the original global name space.
(Usually, the suite contains only function definitions.)  When the
class's suite finishes execution, its execution frame is discarded but
its local name space is saved.  A class object is then created using
the inheritance list for the base classes and the saved local name
space for the attribute dictionary.  The class name is bound to this
class object in the original local name space.
\index{inheritance}
\indexii{class}{name}
\indexii{name}{binding}
\indexii{execution}{frame}
