已经有了一些很好的答案,但没有一个解决了__future__语句目前支持的内容的完整列表。
简单地说,__future__语句迫使Python解释器使用该语言的新特性。
目前支持的特性如下:
nested_scopes
在Python 2.1之前,以下代码将引发NameError:
def f():
...
def g(value):
...
return g(value-1) + 1
...
from __future__ import nested_scopes指令将允许启用此功能。
发电机
引入了如下的生成器函数来保存连续函数调用之间的状态:
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
部门
Python 2中使用经典除法。x版本。这意味着一些除法语句返回除法的合理近似值(“真除法”),而另一些则返回floor(“floor除法”)。从Python 3.0开始,true除法由x/y指定,而floor除法由x//y指定。
from __future__导入除法指令强制使用Python 3.0风格的除法。
absolute_import
允许用圆括号括起多个import语句。例如:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
而不是:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
Or:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
with_statement
在Python中作为关键字添加语句with,以消除对try/finally语句的需求。它的常见用途是在执行文件I/O时,例如:
with open('workfile', 'r') as f:
read_data = f.read()
print_function:
强制使用Python 3圆括号样式的print()函数调用,而不是print MESSAGE样式语句。
unicode_literals
为bytes对象引入文字语法。这意味着像bytes('Hello world', 'ascii')这样的语句可以简单地表示为b'Hello world'。
generator_stop
将生成器函数内部使用的StopIteration异常替换为RuntimeError异常。
上面没有提到的另一个用途是__future__语句也需要使用Python 2.1+解释器,因为使用旧版本会抛出运行时异常。
参考文献
https://docs.python.org/2/library/future.html
https://docs.python.org/3/library/future.html
https://docs.python.org/2.2/whatsnew/node9.html
https://www.python.org/dev/peps/pep-0255/
https://www.python.org/dev/peps/pep-0238/
https://www.python.org/dev/peps/pep-0328/
https://www.python.org/dev/peps/pep-3112/
https://www.python.org/dev/peps/pep-0479/