#
6.6 `print` 文

  `print_stmt` | ::= | `"print" ( [expression ("," expression)* [","]]`
  |  | `| ">`>`" expression [("," expression)+ [","]] )`

  Download entire grammar as text.

`print` は、式を逐次的に評価し、得られたオブジェクトを 標準出力に書き出します。オブジェクトが文字列でなければ、まず文字列 変換規則を使って文字列に変換され、次いで (得られた文字列か、オリジナル の文字列が) 書き出されます。出力系の現在の書き出し位置が行頭にある と考えられる場合を除き、各オブジェクトの出力前にスペースが一つ出力 されます。行頭にある場合とは、(1) 標準出力にまだ何も書き出されて いない場合、(2) 標準出力に最後に書き出された文字が "`\n`" である、または (3) 標準出力に対する最後の書き出し操作が `print` 文によるものではない場合、です。(こうした理由から、 場合によっては空文字を標準出力に書き出すと便利なことがあります。) 注意: 組み込みのファイルオブジェクトでない、ファイルオブジェクト に似た動作をするオブジェクトでは、組み込みのファイルオブジェクト が持つ上記の性質を適切にエミュレートしていないことがあるため、 当てにしないほうがよいでしょう。

`print` 文がカンマで終了していない限り、末尾には文字 "`\n`" が書き出されます。この仕様は、文に予約語 `print` がある場合のみの動作です。

標準出力は、組み込みモジュール `sys` 内で `stdout` という名前のファイルオブジェクトとして定義されています。 該当するオブジェクトが存在しないか、オブジェクトに `write()` メソッドがない場合、`RuntimeError` 例外が送出されます。.

`print` には、上で説明した構文の第二形式で定義されている 拡張形式 があります。 この形式は、``山形 `print` 表記 (`print` chevron)'' と呼ばれます。この形式では、`>``>` の直後にくる最初の 式の値評価結果は ``ファイル類似 (file-like)'' なオブジェクト、とりわけ 上で述べたように `write()` メソッドを持つオブジェクトで なければなりません。この拡張形式では、ファイルオブジェクトを指定する 式よりも後ろの式が、指定されたファイルオブジェクトに出力されます。 最初の式の値評価結果が `None` になった場合、 `sys.stdout` が出力ファイルとして使われます。