__future__经常出现在Python模块中。即使在阅读了Python的__future__文档之后,我也不明白__future__是用于什么以及如何/何时使用它。
谁能举例解释一下吗?
我收到的一些关于__future__的基本用法的回答似乎是正确的。
然而,我需要了解关于__future__如何工作的另一件事:
最令我困惑的概念是,当前的python版本如何包含未来版本的特性,以及使用未来版本特性的程序如何在当前版本的python中成功编译。
我猜当前的发行版中包含了未来的潜在特性。然而,这些特性只能通过使用__future__才能使用,因为它们不是当前的标准。如果我是对的,请告诉我。
当你这样做时
from __future__ import whatever
实际上使用的不是import语句,而是future语句。您正在阅读错误的文档,因为您实际上没有导入该模块。
Future语句很特殊——它们改变了Python模块的解析方式,这就是为什么它们必须位于文件顶部的原因。它们为文件中的单词或符号赋予新的或不同的含义。从文档中可以看出:
future语句是向编译器发出的指令,指示应该使用特定的Python未来版本中可用的语法或语义来编译特定的模块。future语句旨在简化向Python引入不兼容更改的未来版本的迁移。它允许在每个模块的基础上使用新特性,在该特性成为标准的版本之前。
如果你真的想导入__future__模块,就这么做吧
import __future__
然后像往常一样访问它。
我发现非常有用的一个用法是__future__模块中的print_function。
在Python 2.7中,我希望将来自不同print语句的字符打印在不带空格的同一行上。
可以在结尾使用逗号(“,”),但也会附加一个额外的空格。
以上语句用作:
from __future__ import print_function
...
print (v_num,end="")
...
这将在不带空格的单行中打印每次迭代的v_num值。
当你这样做时
from __future__ import whatever
实际上使用的不是import语句,而是future语句。您正在阅读错误的文档,因为您实际上没有导入该模块。
Future语句很特殊——它们改变了Python模块的解析方式,这就是为什么它们必须位于文件顶部的原因。它们为文件中的单词或符号赋予新的或不同的含义。从文档中可以看出:
future语句是向编译器发出的指令,指示应该使用特定的Python未来版本中可用的语法或语义来编译特定的模块。future语句旨在简化向Python引入不兼容更改的未来版本的迁移。它允许在每个模块的基础上使用新特性,在该特性成为标准的版本之前。
如果你真的想导入__future__模块,就这么做吧
import __future__
然后像往常一样访问它。
在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循环执行时,它都会将*打印到下一行。