__future__ ——未来报表定义

源代码: Lib/__future__.py


__future__ 是一个真正的模块,有三个用途:

  • 为了避免混淆现有的工具,这些工具分析导入语句并期望找到它们正在导入的模块。

  • 确保 future statements 在2.1之前的版本下运行,至少产生运行时异常(导入 __future__ 将失败,因为在2.1之前没有该名称的模块)。

  • 记录什么时候引入了不兼容的更改,以及何时强制执行这些更改。这是一种可执行文档的形式,可以通过导入以编程方式检查 __future__ 并检查其内容。

中的每个语句 __future__.py 形式为:

FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                       CompilerFlag)

通常情况下, OptionalRelease 小于 MandatoryRelease ,两个都是与 sys.version_info ::

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

CompilerFlag 是应该在第四个参数中传递给内置函数的(位字段)标志 compile() 在动态编译的代码中启用该功能。此标志存储在 compiler_flag 属性对 _Feature 实例。

不会从中删除任何功能描述 __future__ . 自从在python 2.1中引入了以下特性后,使用这种机制可以在语言中找到它们的方法:

特征

可选的

强制性的

影响

nested_scopes

2.1.0b1

2.2

PEP 227静态嵌套作用域

生成器

2.2.0a1

2.3

PEP 255简单生成器

分开

2.2.0a2

3.0

PEP 238更改除法运算符

absolute_import

2.5.0a1

3.0

PEP 328Imports: Multi-Line and Absolute/Relative

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 3112python 3000中的字节文本

generator_stop

3.5.0b1

3.7

PEP 479生成器中的StopIteration处理

注解

3.7.0b1

3.10

PEP 563批注的延迟评估

参见

未来报表

编译器如何处理将来的导入。