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_scopes
Dyrektywa 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 division
dyrektywa wymusza stosowanie Python 3.0 stylu Division.
absolute_import
Pozwala na umieszczenie w nawiasie wielu import
instrukcji. 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ę with
jako słowo kluczowe w Pythonie, aby wyeliminować potrzebę try/finally
instrukcji. 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 MESSAGE
stylu.
unicode_literals
Wprowadza dosłowną składnię dla bytes
obiektu. Oznacza to, że takie stwierdzenia bytes('Hello world', 'ascii')
można po prostu wyrazić jako b'Hello world'
.
generator_stop
Zastępuje StopIteration
wyją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