__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 328 : Imports: 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 3112 : python 3000中的字节文本 |
generator_stop |
3.5.0b1 |
3.7 |
PEP 479 : 生成器中的StopIteration处理 |
注解 |
3.7.0b1 |
3.10 |
PEP 563 : 批注的延迟评估 |
参见
- 未来报表
编译器如何处理将来的导入。