29.10. __future__
— Future statement definitions¶
__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_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:Python3000中的字节字面值 |
generator_stop | 3.5.0b1 | 3.7 | PEP 479:生成器内的StopIteration处理 |
也可以看看
- Future statements
- 编译器如何处理未来的导入。