Đã 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_scopes
nà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 division
nà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 import
câ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 with
dưới dạng từ khóa trong Python để loại bỏ sự cần thiết của try/finally
câ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 MESSAGE
câ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