future 文 は、 将来の特定の Python のリリースで利用可能になるような構文や意味付け を使って、特定のモジュールをコンパイルさせるための、コンパイラに 対する指示句 (directive) です。 future 文は、言語仕様に非互換性がもたらされるような、将来の Python のバージョンに容易に移行できるよう意図されています。 future 文によって、新たな機能が標準化されたリリースが 出される前に、その機能をモジュール単位で使えるようにします。
future_statement | ::= | "from" "__future__" "import" feature ["as" name] ("," feature ["as" name])* |
| "from" "__future__" "import" "(" feature ["as" name] ("," feature ["as" name])* [","] ")" | ||
feature | ::= | identifier |
name | ::= | identifier |
future 文は、モジュールの先頭周辺に書かなければなりません。 future 文の前に書いてよい内容は:
です。
Python 2.3 が feature 文で新たに認識するようになった機能は、 "generators"、"division"、および "nested_scopes"です。 "generators" および "nested_scopes" は Python 2.3 では常に有効になっているので、冗長な機能名といえます。
future 文は、コンパイル時に特別なやり方で認識され、扱われます: 言語の中核をなす構文構成 (construct) に対する意味付けが変更されて いる場合、変更部分はしばしば異なるコードを生成することで実現 されています。新たな機能によって、(新たな予約語のような) 互換性のない新たな構文が取り入れられることさえあります。 この場合、コンパイラはモジュールを別のやりかたで解析する必要が あるかもしれません。こうしたコード生成に関する決定は、 実行時まで先延ばしすることはできません。
これまでの全てのリリースにおいて、コンパイラはどの機能が定義済み かを知っており、future 文に未知の機能が含まれている場合には コンパイル時エラーを送出します。
future 文の実行時における直接的な意味付けは、import 文と同じです。 標準モジュール __future__ があり、これについては後で述べます。 __future__ は、future 文が実行される際に通常の方法で import されます。
future 文の実行時における特別な意味付けは、future 文で有効化される 特定の機能によって変わります。
以下の文:
import __future__ [as name]
には、何ら特殊な意味はないので注意してください。
これは future 文ではありません; この文は通常の import 文であり、 その他の特殊な意味付けや構文的な制限はありません。
future 文の入ったモジュール M 内で使われている exec 文、組み込み関数 compile() や execfile() によってコンパイルされるコードは、デフォルトの設定では、 future 文に関係する新たな構文や意味付けを使うようになっています。 Python 2.2 からは、この仕様を compile() のオプション引数 で制御できるようになりました -- 詳細はライブラリリファレンスの compile() に関するドキュメントを参照してください。
対話的インタプリタのプロンプトでタイプ入力した future 文は、 その後のインタプリタセッション中で有効になります。インタプリタ を -i オプションで起動して実行すべきスクリプト名を 渡し、スクリプト中に future 文を入れておくと、新たな機能は スクリプトが実行された後に開始する対話セッションで有効になります。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。