__future__
— 未來語句定義¶
原始碼: Lib/__future__.py
形如 from __future__ import feature
的匯入語句被稱為未來語句。Python 編譯器會特殊處理這些語句,以便在功能成為標準之前,在包含未來語句的模組中使用新的 Python 功能。
雖然這些未來語句由 Python 編譯器賦予了特殊的含義,但它們仍然像任何其他匯入語句一樣執行,並且 __future__
存在並且由匯入系統以與其他任何 Python 模組相同的方式處理。 此設計有三個目的:
避免混淆分析匯入語句並期望找到它們正在匯入的模組的現有工具。
記錄何時引入不相容的更改,以及何時(或曾經)強制執行這些更改。 這是一種可執行文件的形式,可以透過匯入
__future__
並檢查其內容來以程式設計方式進行檢查。確保 未來語句 在 Python 2.1 之前的版本下至少會產生執行時異常(因為在 2.1 之前沒有同名模組,所以匯入
__future__
將會失敗)。
模組內容¶
永遠不會從 __future__
中刪除任何功能描述。 自從 Python 2.1 引入以來,以下功能透過此機制進入了該語言:
功能 |
可選版本 |
強制版本 |
效果 |
---|---|---|---|
nested_scopes |
2.1.0b1 |
2.2 |
PEP 227:靜態巢狀作用域 |
generators |
2.2.0a1 |
2.3 |
PEP 255:簡單生成器 |
division |
2.2.0a2 |
3.0 |
PEP 238:更改除法運算子 |
absolute_import |
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:使 print 成為一個函式 |
unicode_literals |
2.6.0a2 |
3.0 |
PEP 3112:Python 3000 中的位元組字面量 |
generator_stop |
3.5.0b1 |
3.7 |
PEP 479:生成器內部的 StopIteration 處理 |
annotations |
3.7.0b1 |
待定 [1] |
PEP 563:延遲評估註解 |
- class __future__._Feature¶
__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 )
- _Feature.getOptionalRelease()¶
OptionalRelease 記錄接受該功能的第一個版本。
- _Feature.getMandatoryRelease()¶
如果 MandatoryRelease 尚未發生,則 MandatoryRelease 會預測該功能將成為語言一部分的版本。
否則,MandatoryRelease 記錄該功能成為語言一部分的時間;在該版本或之後的版本中,模組不再需要未來語句來使用相關功能,但可以繼續使用此類匯入。
MandatoryRelease 也可能是
None
,這意味著計劃的功能被放棄了,或者尚未決定。
- _Feature.compiler_flag¶
CompilerFlag 是應在內建函式
compile()
的第四個引數中傳遞的(位域)標誌,以便在動態編譯的程式碼中啟用該功能。 該標誌儲存在_Feature.compiler_flag
屬性中,該屬性位於_Feature
例項上。