Es gibt bereits einige gute Antworten, aber keine von ihnen enthält eine vollständige Liste dessen, was die __future__Aussage derzeit unterstützt.
Einfach ausgedrückt, zwingt die __future__Anweisung Python-Interpreter, neuere Funktionen der Sprache zu verwenden.
Folgende Funktionen werden derzeit unterstützt:
nested_scopes
Vor Python 2.1 löste der folgende Code einen NameError aus :
def f():
...
def g(value):
...
return g(value-1) + 1
...
Die from __future__ import nested_scopesDirektive ermöglicht die Aktivierung dieser Funktion.
generators
Eingeführte Generatorfunktionen wie die folgende, um den Status zwischen aufeinanderfolgenden Funktionsaufrufen zu speichern:
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
division
Die klassische Unterteilung wird in Python 2.x-Versionen verwendet. Dies bedeutet, dass einige Divisionsanweisungen eine vernünftige Annäherung an die Division ("wahre Division") und andere den Floor ("Floor Division") zurückgeben. Ab Python 3.0 wird die wahre Division durch angegeben x/y, während die Bodenteilung durch angegeben wird x//y.
Die from __future__ import divisionDirektive erzwingt die Verwendung der Python 3.0-Stilteilung.
absolute_import
Ermöglicht es Klammern, mehrere importAnweisungen einzuschließen . Zum Beispiel:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
Anstatt:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
Oder:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
with_statement
Fügt die Anweisung withals Schlüsselwort in Python hinzu, um die Notwendigkeit von try/finallyAnweisungen zu beseitigen . Dies wird häufig bei Datei-E / A verwendet, z. B.:
with open('workfile', 'r') as f:
read_data = f.read()
print_function::
Erzwingt die Verwendung des Funktionsaufrufs im Python 3-Klammerstil print()anstelle der print MESSAGEstyle-Anweisung.
unicode_literals
Führt die Literal-Syntax für das bytesObjekt ein. Dies bedeutet, dass Aussagen wie bytes('Hello world', 'ascii')einfach ausgedrückt werden können als b'Hello world'.
generator_stop
Ersetzt die Verwendung der StopIterationin Generatorfunktionen verwendeten Ausnahme durch die RuntimeErrorAusnahme.
Eine andere Verwendung, die oben nicht erwähnt wurde, ist, dass die __future__Anweisung auch die Verwendung von Python 2.1+ -Interpretern erfordert, da die Verwendung einer älteren Version eine Laufzeitausnahme auslöst.
Verweise