协慌网

登录 贡献 社区

Python 中的__future__是什么,以及如何 / 何时使用它以及如何工作

__future__经常出现在 Python 模块中。即使阅读了 Python 的__future__文档,我也不了解__future__是什么用途以及如何 / 何时使用它。

有人可以举例说明吗?

__future__的基本用法的一些答案似乎是正确的。

但是,我还需要了解关于__future__工作原理的另一件事:

对我而言,最令人困惑的概念是当前的 python 版本如何包含未来版本的功能,以及如何使用当前版本的 Python 成功地编译使用未来版本的功能的程序。

我猜想当前版本包含了将来的潜在功能。但是,这些功能仅可通过使用__future__来使用,因为它们不是当前标准。让我知道我是否正确。

答案

通过__future__模块,您可以逐渐习惯于不兼容的更改或引入新关键字的更改。

例如,对于使用上下文管理器,您必须从 2.5 中的from __future__ import with_statement with关键字是 new,不再应该用作变量名。为了with作为 Python 关键字,您将需要使用上面的 import。

另一个例子是

from __future__ import division
print 8/7  # prints 1.1428571428571428
print 8//7 # prints 1

没有__future__东西,两个print语句都将打印1

内部差异在于,如果没有该导入,则/映射到__div__()方法,而使用__truediv__() 。 (无论如何, //调用__floordiv__() 。)

Apropos printprint在 3.x 中成为功能,失去其特殊属性作为关键字。反之亦然。

>>> print

>>> from __future__ import print_function
>>> print
<built-in function print>
>>>

当你做

from __future__ import whatever

您实际上不是在使用import语句,而是在future 语句。您正在阅读错误的文档,因为您实际上并未在导入该模块。

以后的语句很特殊 - 它们改变了您解析 Python 模块的方式,这就是为什么它们必须位于文件顶部的原因。它们为文件中的单词或符号赋予了新的(或不同的)含义。从文档中:

将来的语句向编译器发出指令,指示应使用在指定的将来的 Python 版本中可用的语法或语义来编译特定的模块。将来的声明旨在简化向 Python 的未来版本的移植,从而对语言进行不兼容的更改。它允许在该功能成为标准发布之前,按模块逐个使用这些新功能。

如果您实际上要导入__future__模块,则只需执行

import __future__

然后照常访问它。

__future__是一个伪模块,程序员可以使用它来启用与当前解释器不兼容的新语言功能。例如,表达式11/4当前求值为2 。如果执行该模块的模块通过执行以下命令启用了真除法:

from __future__ import division

表达式11/4计算结果为2.75 。通过导入__future__模块并评估其变量,您可以看到新功能何时首次添加到语言中以及何时将成为默认功能:

>>> import __future__
  >>> __future__.division
  _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)