__future__
--- Future 语句定义¶
源代码: Lib/__future__.py
Imports of the form from __future__ import feature
are called
future statements. These are special-cased by the Python compiler
to allow the use of new Python features in modules containing the future statement
before the release in which the feature becomes standard.
While these future statements are given additional special meaning by the
Python compiler, they are still executed like any other import statement and
the __future__
exists and is handled by the import system the same way
any other Python module would be. This design serves three purposes:
避免混淆已有的分析 import 语句并查找 import 的模块的工具。
当引入不兼容的修改时,可以记录其引入的时间以及强制使用的时间。这是一种可执行的文档,并且可以通过 import
__future__
来做程序性的检查。To ensure that future statements run under releases prior to Python 2.1 at least yield runtime exceptions (the import of
__future__
will fail, because there was no module of that name prior to 2.1).
Module Contents¶
__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: * "with" 语句* |
print_function |
2.6.0a2 |
3.0 |
PEP 3105: print 改为函数 |
unicode_literals |
2.6.0a2 |
3.0 |
PEP 3112: Python 3000 中的字节字面值 |
generator_stop |
3.5.0b1 |
3.7 |
PEP 479: 在生成器中处理 StopIteration |
annotations |
3.7.0b1 |
TBD [1] |
PEP 563: Postponed evaluation of annotations |
- class __future__._Feature¶
__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 )
- _Feature.getOptionalRelease()¶
OptionalRelease 记录了一个特性首次发布时的 Python 版本。
- _Feature.getMandatoryRelease()¶
在 MandatoryRelases 还没有发布时,MandatoryRelease 表示该特性会变成语言的一部分的预测时间。
其他情况下,MandatoryRelease 用来记录这个特性是何时成为语言的一部分的。从该版本往后,使用该特性将不需要 future 语句,不过很多人还是会加上对应的 import。
MandatoryRelease 也可能为
None
,表示计划中的特性被撤销或尚未确定。
- _Feature.compiler_flag¶
CompilerFlag 是一个(位)旗标,对于动态编译的代码应当将其作为第四个参数传给内置函数
compile()
以启用相应的特性。 该旗标存储在_Feature
实例的_Feature.compiler_flag
属性中。