29.10. __future__ — Future statement definitions

源代码: Lib / __ future __。py

__future__是一个真正的模块,具有三个目的:

  • 为了避免混淆分析import语句并希望找到他们正在导入的模块的现有工具。
  • 要确保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记录该功能成为语言的一部分;在版本中或之后,模块不再需要未来语句来使用相关功能,但可以继续使用此类导入。

MandatoryRelease也可能是None,意味着计划的要素被删除。

_Feature的实例有两个对应的方法,getOptionalRelease()getMandatoryRelease()

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

将不会从__future__中删除功能说明。自从它在Python 2.1中的引入以来,以下功能已经找到了他们的方式到使用这种机制的语言:

特征可选强制性影响
nested_scopes2.1.0b12.2 PEP 227静态嵌套作用域
生成器2.2.0a12.3 PEP 255简单生成器
2.2.0a23.0 PEP 238更改分割操作符
absolute_import2.5.0a13.0 PEP 328导入:多行和绝对/相对
with_statement2.5.0a12.6 PEP 343“with”语句
print_function2.6.0a23.0 PEP 3105打印功能
unicode_literals2.6.0a23.0 PEP 3112Python3000中的字节字面值
generator_stop3.5.0b13.7 PEP 479生成器内的StopIteration处理

也可以看看

Future statements
编译器如何处理未来的导入。