__future__ — Future 语句定义 — Python 文档
来自菜鸟教程
Python/docs/3.8/library/ future
__future__ — 未来语句定义
源代码: :source:`Lib/__future__.py`
__future__ 是一个真正的模块,用于三个目的:
- 避免混淆分析导入语句并期望找到它们正在导入的模块的现有工具。
- 为了确保 future statements 在 2.1 之前的版本下运行,至少会产生运行时异常(__future__ 的导入将失败,因为在 2.1 之前没有该名称的模块)。
- 记录何时引入了不兼容的更改,以及何时将 - 或曾经 - 强制执行。 这是一种可执行文档形式,可以通过导入 __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 预测该功能将成为语言一部分的版本。
Else MandatoryRelease 记录该功能何时成为语言的一部分; 在此后或之后的版本中,模块不再需要 future 语句来使用相关功能,但可以继续使用此类导入。
MandatoryRelease 也可能是 None
,这意味着计划中的功能被删除了。
类 _Feature
的实例有两个对应的方法,getOptionalRelease()
和 getMandatoryRelease()
。
CompilerFlag 是(位域)标志,应该在第四个参数中传递给内置函数 compile() 以在动态编译代码中启用该功能。 此标志存储在 _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”声明 |
打印功能 | 2.6.0a2 | 3.0 | PEP 3105: 使打印功能 |
unicode_literals | 2.6.0a2 | 3.0 | PEP 3112:Python 3000中的字节文字 |
generator_stop | 3.5.0b1 | 3.7 | PEP 479:生成器内部的停止迭代处理 |
注释 | 3.7.0b1 | 3.10 | PEP 563:注释的延迟评估 |