8. 複合陳述式¶
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 if, while and for statements implement
traditional control flow constructs. try specifies exception
handlers and/or cleanup code for a group of statements, while the
with statement allows the execution of initialization and
finalization code around a block of code. Function and class definitions are
also syntactically compound statements.
A compound statement consists 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 a suite can contain nested compound statements; the following is illegal,
mostly because it wouldn't be clear to which if clause a following
else clause would belong:
if test1: if test2: print(x)
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 print() calls are
executed:
if x < y < z: print(x); print(y); print(z)
Summarizing:
compound_stmt:if_stmt|while_stmt|for_stmt|try_stmt|with_stmt|match_stmt|funcdef|classdef|async_with_stmt|async_for_stmt|async_funcdefsuite:stmt_listNEWLINE | NEWLINE INDENTstatement+ DEDENT statement:stmt_listNEWLINE |compound_stmtstmt_list:simple_stmt(";"simple_stmt)* [";"]
Note that statements always end in a NEWLINE possibly followed by a
DEDENT. Also note that optional continuation clauses always begin with a
keyword that cannot start a statement, thus there are no ambiguities (the
'dangling else' problem is solved in Python by requiring nested
if statements to be indented).
The formatting of the grammar rules in the following sections places each clause on a separate line for clarity.
8.1. if 陳述式¶
The if statement is used for conditional execution:
if_stmt: "if"assignment_expression":"suite("elif"assignment_expression":"suite)* ["else" ":"suite]
It selects exactly one of the suites by evaluating the expressions one by one
until one is found to be true (see section Boolean operations for the definition of
true and false); then that suite is executed (and no other part of the
if statement is executed or evaluated). If all expressions are
false, the suite of the else clause, if present, is executed.
8.2. while 陳述式¶
The while statement is used for repeated execution as long as an
expression is true:
while_stmt: "while"assignment_expression":"suite["else" ":"suite]
This repeatedly tests the expression and, if it is true, executes the first
suite; if the expression is false (which may be the first time it is tested) the
suite of the else clause, if present, is executed and the loop
terminates.
A break statement executed in the first suite terminates the loop
without executing the else clause's suite. A continue
statement executed in the first suite skips the rest of the suite and goes back
to testing the expression.
8.3. for 陳述式¶
The for statement is used to iterate over the elements of a sequence
(such as a string, tuple or list) or other iterable object:
for_stmt: