Istnieje już kilka świetnych odpowiedzi, ale żadna z nich nie odnosi się do pełnej listy tego, co __future__ oświadczenie obecnie obsługuje.
Mówiąc prościej, oświadczenie zmusza tłumaczy Python użyć nowszych funkcji języka.__future__
Funkcje, które obecnie obsługuje to:
nested_scopes
Przed wersją Python 2.1 następujący kod wywoływałby błąd NameError :
def f():
...
def g(value):
...
return g(value-1) + 1
...
from __future__ import nested_scopesDyrektywa pozwoli tej funkcji była włączona.
generators
Wprowadzono funkcje generatora, takie jak ta poniżej, aby zapisać stan pomiędzy kolejnymi wywołaniami funkcji:
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
division
Klasyczny podział jest używany w wersjach Python 2.x. Oznacza to, że niektóre stwierdzenia podziału zwracają rozsądne przybliżenie podziału („podział prawdziwy”), a inne zwracają piętro („podział podłogi”). Począwszy od Python 3.0, prawdziwy podział jest określony przez x/y, podczas gdy podział podłogi jest określony przezx//y .
Do from __future__ import divisiondyrektywa wymusza stosowanie Python 3.0 stylu Division.
absolute_import
Pozwala na umieszczenie w nawiasie wielu importinstrukcji. Na przykład:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
Zamiast:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
Lub:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
with_statement
Dodaje instrukcję withjako słowo kluczowe w Pythonie, aby wyeliminować potrzebę try/finallyinstrukcji. Typowe zastosowania tego są podczas wykonywania operacji we / wy pliku, takich jak:
with open('workfile', 'r') as f:
read_data = f.read()
print_function:
Wymusza użycie print()wywołania funkcji w nawiasie w stylu Python 3 zamiast instrukcji print MESSAGEstylu.
unicode_literals
Wprowadza dosłowną składnię dla bytesobiektu. Oznacza to, że takie stwierdzenia bytes('Hello world', 'ascii')można po prostu wyrazić jako b'Hello world'.
generator_stop
Zastępuje StopIterationwyjątek zastosowany w funkcjach generatora RuntimeError.
Innym niewymienionym powyżej zastosowaniem jest to, że __future__instrukcja wymaga również użycia interpreterów języka Python 2.1+, ponieważ użycie starszej wersji spowoduje zgłoszenie wyjątku czasu wykonywania.
Bibliografia