"__future__" --- Future 陳述式定義
**********************************

**原始碼：**Lib/__future__.py

======================================================================

"from __future__ import feature" 形式的引入被稱為 future 陳述式。這些
是 Python 編譯器的特殊情況，允許在該功能成為標準版本之前在包含 future
陳述式的模組中使用新的 Python 功能。

雖然這些 future 陳述式被 Python 編譯器賦予了額外的特殊意義，但它們仍然
像任何其他 import 陳述式一樣執行，且 "__future__" 由引入系統以和任何其
他 Python 模組相同的方式處理。這個設計有三個目的：

* 為了避免混淆分析引入陳述式並預期要找到它們正在引入之模組的現有工具。

* 記錄何時出現不相容的變更，以及何時開始強制執行這些變更。這是一種可執
  行文件的形式，可以透過引入 "__future__" 並檢查其內容以程式化的方式進
  行檢查。

* 確保 future 陳述式在 Python 2.1 之前的版本中運行至少會產生 runtime
  例外（"__future__" 的引入將會失敗，因為 2.1 之前沒有該名稱的模組）。


模組內容
========

不會從 "__future__" 中刪除任何功能描述。自從在 Python 2.1 中引入以來，
以下功能已透過這種機制引入到該語言中：

+--------------------+---------------+----------------+-----------------------------------------------+
| 功能               | 可選的版本    | 強制性的版本   | 影響                                          |
|====================|===============|================|===============================================|
| nested_scopes      | 2.1.0b1       | 2.2            | **PEP 227**: *靜態巢狀作用域 (Statically      |
|                    |               |                | Nested Scopes)*                               |
+--------------------+---------------+----------------+-----------------------------------------------+
| generators         | 2.2.0a1       | 2.3            | **PEP 255**: *簡單產生器 (Simple Generators)* |
+--------------------+---------------+----------------+-----------------------------------------------+
| division           | 2.2.0a2       | 3.0            | **PEP 238**: *更改除法運算子 (Changing the    |
|                    |               |                | Division Operator)*                           |
+--------------------+---------------+----------------+-----------------------------------------------+
| absolute_import    | 2.5.0a1       | 3.0            | **PEP 328**: *引入：多列與絕對/相對 (Imports: |
|                    |               |                | Multi-Line and Absolute/Relative)*            |
+--------------------+---------------+----------------+-----------------------------------------------+
| with_statement     | 2.5.0a1       | 2.6            | **PEP 343**: *"with" 陳述式 (The "with"       |
|                    |               |                | Statement)*                                   |
+--------------------+---------------+----------------+-----------------------------------------------+
| print_function     | 2.6.0a2       | 3.0            | **PEP 3105**: *使 print 成為一個函式 (Make    |
|                    |               |                | print a function)*                            |
+--------------------+---------------+----------------+-----------------------------------------------+
| unicode_literals   | 2.6.0a2       | 3.0            | **PEP 3112**: *Python 3000 中的位元組字面值   |
|                    |               |                | (Bytes literals in Python 3000)*              |
+--------------------+---------------+----------------+-----------------------------------------------+
| generator_stop     | 3.5.0b1       | 3.7            | **PEP 479**: *產生器內部的 StopIteration 處理 |
|                    |               |                | (StopIteration handling inside generators)*   |
+--------------------+---------------+----------------+-----------------------------------------------+
| annotations        | 3.7.0b1       | TBD [1]        | **PEP 563**: *推遲對註釋的求值 (Postponed     |
|                    |               |                | evaluation of annotations)*                   |
+--------------------+---------------+----------------+-----------------------------------------------+

class __future__._Feature

   "__future__.py" 中的每個陳述式的形式如下：

      FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                             CompilerFlag)

   通常，*OptionalRelease* 會小於 *MandatoryRelease*，且兩者都是與
   "sys.version_info" 形式相同的 5 元組 (5-tuple)：

      (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
      )

_Feature.getOptionalRelease()

   *OptionalRelease* 記錄該功能首次發布時的 Python 版本。

_Feature.getMandatoryRelease()

   如果 *MandatoryRelease* 尚未發布，*MandatoryRelease* 會預測該功能將
   成為該語言一部分的版本。

   否則 *MandatoryRelease* 會記錄該功能是何時成為語言的一部分；在該版
   本或之後的版本中，模組不再需要 future 聲明來使用相關功能，但可以繼
   續使用此種引入方式。

   *MandatoryRelease* 也可能是 "None"，這意味著計劃中的功能被丟棄或者
   仍未決定。

_Feature.compiler_flag

   *CompilerFlag* 是（位元欄位 (bitfield)）旗標，應在第四個引數中傳遞
   給內建函式 "compile()" 以在動態編譯的程式碼中啟用該功能。此旗標存儲
   在 "_Feature" 實例上的 "_Feature.compiler_flag" 屬性中。

[1] 之前原本計劃在 Python 3.10 中強制使用 "from __future__ import
    annotations"，但 Python 指導委員會 (Python Steering Council) 兩次
    決議推遲這一變動（Python 3.10 的公告；Python 3.11 的公告）。目前還
    尚未做出決定。另請參閱 **PEP 563** 和 **PEP 649**。

也參考:

  Future statements
     編譯器如何處理 future 引入。

  **PEP 236** - 回到 __future__
     __future__ 機制的原始提案。
