__future__ —将来のステートメント定義—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.9/library/ future
移動先:案内検索

__ future __ —将来のステートメント定義

ソースコード: :source: `Lib / __ future __。py`



__ future __ は実際のモジュールであり、次の3つの目的を果たします。

  • インポートステートメントを分析し、インポートしているモジュールを見つけることを期待する既存のツールを混乱させないようにするため。
  • futureステートメントが2.1より前のリリースで実行されるようにするには、少なくともランタイム例外が発生します(2.1より前の名前のモジュールがなかったため、 __ future __ のインポートは失敗します)。
  • 互換性のない変更がいつ導入されたのか、いつそれらが必須になるのか、またはいつ必須になるのかを文書化するため。 これは実行可能ドキュメントの形式であり、 __ future __ をインポートしてその内容を調べることにより、プログラムで検査できます。

__future__.pyの各ステートメントの形式は次のとおりです。

FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                       CompilerFlag)

ここで、通常、 OptionalReleaseMandatoryRelease よりも小さく、どちらも sys.version_info と同じ形式の5タプルです。

(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
 PY_MINOR_VERSION, # the 1; an int
 PY_MICRO_VERSION, # the 0; an int
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
 PY_RELEASE_SERIAL # the 3; an int
)

OptionalRelease は、機能が受け入れられた最初のリリースを記録します。

まだ発生していない MandatoryRelease の場合、 MandatoryRelease は、機能が言語の一部になるリリースを予測します。

それ以外の場合、 MandatoryRelease は、機能が言語の一部になった時期を記録します。 それ以降のリリースでは、モジュールは問題の機能を使用するために将来のステートメントを必要としなくなりますが、そのようなインポートを引き続き使用する可能性があります。

MandatoryReleaseNoneの場合もあります。これは、計画された機能が削除されたことを意味します。

クラス_Featureのインスタンスには、getOptionalRelease()getMandatoryRelease()の2つの対応するメソッドがあります。

CompilerFlag は、動的にコンパイルされたコードで機能を有効にするために、組み込み関数 compile()の4番目の引数で渡される必要がある(ビットフィールド)フラグです。 このフラグは、_Featureインスタンスのcompiler_flag属性に格納されます。

__ future __ から機能の説明が削除されることはありません。 Python 2.1での導入以来、次の機能がこのメカニズムを使用して言語に組み込まれています。

特徴 オプションで で必須 効果
ネストされたスコープ 2.1.0b1 2.2 PEP 227静的にネストされたスコープ
発電機 2.2.0a1 2.3 PEP 255シンプルジェネレーター
分割 2.2.0a2 3.0 PEP 238除算演算子の変更
絶対インポート 2.5.0a1 3.0 PEP 328インポート:マルチラインおよび絶対/相対
with_statement 2.5.0a1 2.6 PEP 343「with」ステートメント
print_function 2.6.0a2 3.0 PEP 3105関数を印刷する
unicode_literals 2.6.0a2 3.0 PEP 3112Python3000のバイトリテラル
generator_stop 3.5.0b1 3.7 PEP 479ジェネレーター内でのStopIteration処理
注釈 3.7.0b1 3.10 PEP 563注釈の評価の延期

も参照してください

今後の声明
コンパイラが将来のインポートをどのように処理するか。