Skip to main content

29.10. __future__ —未来语句定义

源代码: Lib/__future__.py


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

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

  • 要确保 未来报表 在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_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 328导入:多行和绝对/相对

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 3112在Python 3000中的字节文字

generator_stop

3.5.0b1

3.7

PEP 479发电机内的StopIteration处理

参见

未来陈述

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