7. 複合文 (compound statement)

複合文には、他の文 (のグループ) が入ります; 複合文は、中に入っている 他の文の実行の制御に何らかのやり方で影響を及ぼします。 一般的には、複合文は複数行にまたがって書かれますが、 全部の文を一行に連ねた単純な書き方もあります。

ifwhile 、および for 文は、 伝統的な制御フロー構成を実現します。try は例外処理 かつ/または一連の文に対するクリーンアップコードを指定します。 関数とクラス定義もまた、構文法的には複合文です。

複合文は、一つまたはそれ以上の `節 (clause)' からなります。 一つの節は、ヘッダと `スイート (suite)' からなります。 特定の複合文を構成する節のヘッダ部分は、全て同じインデント レベルになります。各々の節ヘッダ行は一意に識別されるキーワード から始まり、コロンで終わります。スイートは、ヘッダのコロンの後ろに セミコロンで区切られた一つまたはそれ以上の単純文を並べるか、 ヘッダ行後のインデントされた文の集まりです。 後者の形式のスイートに限り、ネストされた複合文を入れることが できます; 以下の文は、else 節がどの if 節 に属するかがはっきりしないという理由から不正になります:

if test1: if test2: print x

また、このコンテキスト中では、セミコロンはコロンよりも強い結合を 表すことにも注意してください。従って、以下の例では、print は全て実行されるか、されないかのどちらかです:

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

まとめると、以下のようになります:

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)* [";"]
Download entire grammar as text.

文は常に NEWLINE か、その後に DEDENT が続いたもので終了することに注意してください。 また、オプションの継続節は常にあるキーワード から始まり、このキーワードから複合文を開始することはできないため、 曖昧さは存在しないことにも注意してください (Python では、 `ぶら下がり(dangling) else' 問題を、ネストされた if 文はインデントさせること解決しています)。

以下の節における文法規則の記述方式は、明確さのために、 各節を別々の行に書くようにしています。



ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。