已经有一些很好的答案,但没有一个能完整列出__future__ 语句当前支持的内容。
简单地说,__future__ 语句强制 Python 解释器使用该语言的更新功能。
目前支持的功能如下:
nested_scopes
在 Python 2.1 之前,以下代码会引发 NameError:
def f():
...
def g(value):
...
return g(value-1) + 1
...
from __future__ import nested_scopes 指令将允许启用此功能。
generators
引入如下生成器函数来保存连续函数调用之间的状态:
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
division
经典除法用于 Python 2.x 版本。这意味着一些除法语句返回除法的合理近似值(“真除法”),而另一些则返回下限(“下除法”)。从 Python 3.0 开始,真正的除法由x/y 指定,而地板除法由x//y 指定。
from __future__ import division 指令强制使用 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
或者:
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+ 解释器,因为使用旧版本会引发运行时异常。
参考文献