Đã có một số câu trả lời tuyệt vời, nhưng không ai trong số họ giải quyết một danh sách đầy đủ về những gì __future__tuyên bố hiện đang hỗ trợ.
Một cách đơn giản, các __future__tuyên bố buộc thông dịch Python để sử dụng các tính năng mới của ngôn ngữ.
Các tính năng mà nó hiện đang hỗ trợ là như sau:
nested_scopes
Trước Python 2.1, đoạn mã sau sẽ đưa ra NameError :
def f():
...
def g(value):
...
return g(value-1) + 1
...
Lệnh from __future__ import nested_scopesnày sẽ cho phép tính năng này được kích hoạt.
generators
Các hàm tạo được giới thiệu như hàm dưới đây để lưu trạng thái giữa các lệnh gọi hàm liên tiếp:
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
division
Phân chia cổ điển được sử dụng trong các phiên bản Python 2.x. Có nghĩa là một số tuyên bố phân chia trả về một xấp xỉ hợp lý của phân chia ("phân chia thực sự") và các báo cáo khác trả lại sàn ("phân chia sàn"). Bắt đầu trong Python 3.0, phân chia thực được chỉ định bởi x/y, trong khi phân chia sàn được chỉ định bởi x//y.
Lệnh from __future__ import divisionnày buộc sử dụng phân chia kiểu Python 3.0.
absolute_import
Cho phép dấu ngoặc đơn để đính kèm nhiều importcâu lệnh. Ví dụ:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
Thay vì:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
Hoặc là:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
with_statement
Thêm câu lệnh withdưới dạng từ khóa trong Python để loại bỏ sự cần thiết của try/finallycâu lệnh. Việc sử dụng phổ biến này là khi thực hiện I / O tập tin, chẳng hạn như:
with open('workfile', 'r') as f:
read_data = f.read()
print_function:
Buộc sử dụng print()lệnh gọi hàm kiểu ngoặc đơn Python 3 thay vì print MESSAGEcâu lệnh kiểu.
unicode_literals
Giới thiệu cú pháp bằng chữ cho bytesđối tượng. Có nghĩa là các tuyên bố nhưbytes('Hello world', 'ascii') có thể được biểu diễn đơn giản là b'Hello world'.
generator_stop
Thay thế việc sử dụng StopIteration ngoại lệ được sử dụng bên trong các hàm tạo RuntimeError.
Một công dụng khác không được đề cập ở trên là __future__ câu lệnh cũng yêu cầu sử dụng trình thông dịch Python 2.1+ vì sử dụng phiên bản cũ hơn sẽ ném ngoại lệ thời gian chạy.
Người giới thiệu