__future__
__future__ — Future statement definitions
源代码:
Lib / __ future__.py
__future__
是一个真正的模块,并有三个目的:
- 为了避免混淆分析导入语句的现有工具并期望找到它们导入的模块。
- 为确保将来的语句在2.1之前的版本中运行,至少会产生运行时异常(导入
__future__
将失败,因为在2.1之前没有该名称的模块)。
- 记录何时引入了不兼容的变更,以及何时将变为强制变更。这是可执行文档的一种形式,可以通过导入
__future__
并检查其内容以编程方式进行检查。
每个陈述__future__.py
的形式如下:
FeatureName = _Feature(OptionalRelease, MandatoryRelease,
CompilerFlag)
其中,通常OptionalRelease
小于MandatoryRelease
,并且都是与以下形式相同的5元组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
预测该特征将成为该语言的一部分。
其他强制性发布
记录当该特征成为该语言的一部分时; 在此处或之后的发行版中,模块不再需要将来的语句来使用有问题的功能,但可能会继续使用此类导入。
强制释放
也可能是None
,这意味着计划中的功能被删除。
类_Feature的实例有两个相应的方法,getOptionalRelease()和getMandatoryRelease()。
CompilerFlag是应该在内建函数compile()的第四个参数中传递的(位域)标志,以便在动态编译的代码中启用该功能。 该标志存储在_Feature实例的compiler_flag属性中。
不会从中删除任何功能说明__future__
。自Python 2.1推出以来,使用这种机制已经找到了进入该语言的途径:
特征 | 可选 | 强制性的 | 影响 |
---|---|---|---|
nested_scopes | 2.1.0b1 | 2.2 | PEP 227:静态嵌套示波器 |
generators | 2.2.0a1 | 2.3 | PEP 255:简单的发电机 |
division | 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:“带”声明 |
print_function | 2.6.0a2 | 3.0 | PEP 3105:使打印功能 |
unicode_literals | 2.6.0a2 | 3.0 | PEP 3112:Python 3000中的字节文字 |
扩展内容
未来的陈述编译器如何处理未来的进口。