3 回答

TA贡献1829条经验 获得超7个赞
通过__future__包含模块,您可以逐渐习惯于不兼容的更改或引入新关键字的更改。
例如,对于使用上下文管理器,您必须from __future__ import with_statement在2.5中进行操作,因为with关键字是new,并且不再用作变量名。为了with在Python 2.5或更早版本中用作Python关键字,您将需要使用上面的import。
另一个例子是
from __future__ import division
print 8/7 # prints 1.1428571428571428
print 8//7 # prints 1
没有这些__future__东西,两个print语句都将打印出来1。
内部差异在于没有导入时,/映射到__div__()方法,而使用导入__truediv__()。(无论如何,请//致电__floordiv__()。)
Apropos print:print在3.x中成为函数,失去其特殊属性作为关键字。反之亦然。
>>> from __future__ import print_function
<built-in function print>
>>>

TA贡献1825条经验 获得超6个赞
当你做
from __future__ import whatever
您实际上不是在使用import语句,而是在将来的语句。您正在阅读错误的文档,因为您实际上并未在导入该模块。
以后的语句很特殊-它们更改了Python模块的解析方式,这就是为什么它们必须位于文件顶部的原因。它们为文件中的单词或符号赋予了新的(或不同的)含义。从文档:
将来的语句向编译器发出指令,指示应使用在将来指定的Python版本中可用的语法或语义来编译特定模块。将来的声明旨在简化向Python的未来版本的移植,从而对语言进行不兼容的更改。它允许在该功能成为标准版本之前,按模块使用新功能。
如果您确实要导入__future__模块,请执行
import __future__
然后照常访问它。

TA贡献1772条经验 获得超8个赞
__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)
添加回答
举报