在线文档教程

__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_scopes2.1.0b12.2PEP 227:静态嵌套示波器
generators 2.2.0a12.3PEP 255:简单的发电机
division 2.2.0a23.0PEP 238:更改部门操作员
absolute_import2.5.0a13.0PEP 328:进口:多线和绝对/相对
with_statement2.5.0a12.6PEP 343:“带”声明
print_function2.6.0a23.0PEP 3105:使打印功能
unicode_literals2.6.0a23.0PEP 3112:Python 3000中的字节文字

扩展内容

未来的陈述编译器如何处理未来的进口。