__ future __ —将来のステートメント定義
ソースコード: :source: `Lib / __ future __。py`
__ future __ は実際のモジュールであり、次の3つの目的を果たします。
- インポートステートメントを分析し、インポートしているモジュールを見つけることを期待する既存のツールを混乱させないようにするため。
- futureステートメントが2.1より前のリリースで実行されるようにするには、少なくともランタイム例外が発生します(2.1より前の名前のモジュールがなかったため、 __ future __ のインポートは失敗します)。
- 互換性のない変更がいつ導入されたのか、いつそれらが必須になるのか、またはいつ必須になるのかを文書化するため。 これは実行可能ドキュメントの形式であり、 __ future __ をインポートしてその内容を調べることにより、プログラムで検査できます。
__future__.py
の各ステートメントの形式は次のとおりです。
FeatureName = _Feature(OptionalRelease, MandatoryRelease,
CompilerFlag)
ここで、通常、 OptionalRelease は MandatoryRelease よりも小さく、どちらも 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 は、機能が言語の一部になった時期を記録します。 それ以降のリリースでは、モジュールは問題の機能を使用するために将来のステートメントを必要としなくなりますが、そのようなインポートを引き続き使用する可能性があります。
MandatoryRelease はNone
の場合もあります。これは、計画された機能が削除されたことを意味します。
クラス_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 3112 : Python3000のバイトリテラル |
generator_stop | 3.5.0b1 | 3.7 | PEP 479 :ジェネレーター内でのStopIteration処理 |
注釈 | 3.7.0b1 | 3.10 | PEP 563 :注釈の評価の延期 |