9. トップレベル要素

Python インタプリタは、標準入力や、プログラムの引数として与えられたスクリプト、対話的にタイプ入力された命令、モジュールのソースファイルなど、様々な入力源から入力を得ることができます。この章では、それぞれの場合に用いられる構文法について説明しています。

9.1. 完全な Python プログラム

言語仕様でインタープリタの起動方法まで規定する必要はありませんが、完全な Python プログラムという概念を持っておくと役立ちます。 完全な Python プログラムは、最小限に初期化された環境で実行されます。 すべての組み込みモジュールと標準モジュールを利用できますが、sys (各種システムサービス)、builtins (組み込み関数、例外、None)、__main__ 以外は初期化されていません。 最後のモジュールは、完全なプログラムの実行に使うローカルとグローバルの名前空間を提供します。

完全な Python プログラムの構文は、下の節で述べるファイル入力のためのものです。

インタプリタは、対話的モード (interactive mode) で起動されることもあります; この場合、インタプリタは完全なプログラムを読んで実行するのではなく、一度に単一の実行文 (複合文のときもあります) を読み込んで実行します。初期状態の環境は、完全なプログラムを実行するときの環境と同じです; 各実行文は、 __main__ の名前空間内で実行されます。

完全なプログラムは3つの形式でインタープリタに渡せます: -c string コマンドラインオプションで、コマンドラインの第 1 引数で渡されるファイル、あるいは標準入力として渡します。 ファイルや標準入力が tty デバイスだった場合、インタープリタは対話モードに入ります。 それ以外の場合は、ファイルを完全なプログラムとして実行します。

9.2. ファイル入力

非対話的なファイルから読み出された入力は、全て同じ形式:

file_input: (NEWLINE | statement)* ENDMARKER

をとります。この構文法は、以下の状況で用いられます:

  • (ファイルや文字列内の) 完全な Python プログラムを構文解析するとき;

  • モジュールを構文解析するとき;

  • exec() 関数に渡された文字列を構文解析するとき。

9.3. 対話的入力

対話モードでの入力は、以下の文法の下に構文解析されます:

interactive_input: [stmt_list] NEWLINE | compound_stmt NEWLINE | ENDMARKER

対話モードでは、(トップレベルの) 複合文の最後に空白行を入れなくてはならないことに注意してください; これは、複合文の終端をパーザが検出するための手がかりとして必要です。

9.4. 式入力

式入力には eval() が使われます。これは先頭の空白を無視します。 eval() に対する文字列引数は、以下の形式をとらなければなりません:

eval_input: expression_list NEWLINE* ENDMARKER