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

谁能举例解释一下吗?

我收到的一些关于__future__的基本用法的回答似乎是正确的。

然而,我需要了解关于__future__如何工作的另一件事:

最令我困惑的概念是,当前的python版本如何包含未来版本的特性,以及使用未来版本特性的程序如何在当前版本的python中成功编译。

我猜当前的发行版中包含了未来的潜在特性。然而,这些特性只能通过使用__future__才能使用,因为它们不是当前的标准。如果我是对的,请告诉我。


当前回答

它可以用来使用在较旧版本的Python中出现的新版本的特性。

例如

>>> from __future__ import print_function

将允许您使用print作为函数:

>>> print('# of entries', len(dictionary), file=sys.stderr)

其他回答

我发现非常有用的一个用法是__future__模块中的print_function。

在Python 2.7中,我希望将来自不同print语句的字符打印在不带空格的同一行上。

可以在结尾使用逗号(“,”),但也会附加一个额外的空格。 以上语句用作:

from __future__ import print_function
...
print (v_num,end="")
...

这将在不带空格的单行中打印每次迭代的v_num值。

它可以用来使用在较旧版本的Python中出现的新版本的特性。

例如

>>> from __future__ import print_function

将允许您使用print作为函数:

>>> print('# of entries', len(dictionary), file=sys.stderr)

在Python 3.0之后,print不再只是一个语句,而是一个函数。并包含在PEP 3105中。

此外,我认为Python 3.0包仍然具有这些特殊的功能。让我们通过Python中传统的“金字塔程序”来看看它的可用性:

from __future__ import print_function

class Star(object):
    def __init__(self,count):
        self.count = count

    def start(self):
        for i in range(1,self.count):
            for j in range (i): 
                print('*', end='') # PEP 3105: print As a Function 
            print()

a = Star(5)
a.start()

Output:
*
**
***
****

如果我们使用普通的print函数,我们将无法实现相同的输出,因为print()带有一个额外的换行符。所以每次内部的for循环执行时,它都会将*打印到下一行。

或者就像说“因为这是python v2.7,使用不同的'print'函数,该函数在python 3中添加后也添加到python v2.7中。”所以我的“打印”将不再是语句(例如打印“message”),而是函数(例如,打印(“message”,选项)。这样,当我的代码在python3中运行时,'print'就不会中断。”

In

from __future__ import print_function

Print_function模块包含'print'的新实现,就像它在python v3中的行为一样。

这里有更多解释:http://python3porting.com/noconv.html

__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)