29.10. __future__ — Future 语句定义 — Python 文档

来自菜鸟教程
Python/docs/3.6/library/ future
跳转至:导航、​搜索

29.10. __未来__ — 未来语句定义

源代码: :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 3112Python 3000中的字节文字
generator_stop 3.5.0b1 3.7 PEP 479生成器内部的停止迭代处理

也可以看看

未来的陈述
编译器如何处理未来的导入。