__future__经常出现在Python模块中。即使在阅读了Python的__future__文档之后,我也不明白__future__是用于什么以及如何/何时使用它。
谁能举例解释一下吗?
我收到的一些关于__future__的基本用法的回答似乎是正确的。
然而,我需要了解关于__future__如何工作的另一件事:
最令我困惑的概念是,当前的python版本如何包含未来版本的特性,以及使用未来版本特性的程序如何在当前版本的python中成功编译。
我猜当前的发行版中包含了未来的潜在特性。然而,这些特性只能通过使用__future__才能使用,因为它们不是当前的标准。如果我是对的,请告诉我。
通过__future__模块的包含,你可以慢慢地习惯不兼容的更改或引入新的关键字。
例如,对于使用上下文管理器,你必须在2.5中执行from __future__ import with_statement,因为with关键字是新的,不应该再用作变量名。为了在Python 2.5或更高版本中使用with作为Python关键字,您将需要使用上面的导入。
另一个例子是
from __future__ import division
print 8/7 # prints 1.1428571428571428
print 8//7 # prints 1
如果没有__future__这个东西,两个print语句都将输出1。
内部区别在于,如果没有导入,/将被映射到__div__()方法,而有了导入,将使用__truediv__()方法。(在任何情况下,//调用__floordiv__()。)
恰当的打印:打印成为3中的一个函数。X,失去它作为关键字的特殊属性。所以情况正好相反。
>>> print
>>> from __future__ import print_function
>>> print
<built-in function print>
>>>
我发现非常有用的一个用法是__future__模块中的print_function。
在Python 2.7中,我希望将来自不同print语句的字符打印在不带空格的同一行上。
可以在结尾使用逗号(“,”),但也会附加一个额外的空格。
以上语句用作:
from __future__ import print_function
...
print (v_num,end="")
...
这将在不带空格的单行中打印每次迭代的v_num值。
__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)