Ci sono già delle ottime risposte, ma nessuna di esse affronta un elenco completo di ciò che __future__
dichiarazione attualmente supporta.
In parole povere, la __future__
dichiarazione obbliga gli interpreti Python a utilizzare le nuove funzionalità del linguaggio.
Le funzionalità attualmente supportate sono le seguenti:
nested_scopes
Prima di Python 2.1, il codice seguente generava un NameError :
def f():
...
def g(value):
...
return g(value-1) + 1
...
La from __future__ import nested_scopes
direttiva consentirà di abilitare questa funzione.
generators
Introdotte funzioni del generatore come quella qui sotto per salvare lo stato tra successive chiamate di funzione:
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
division
La divisione classica viene utilizzata nelle versioni Python 2.x. Ciò significa che alcune dichiarazioni di divisione restituiscono una ragionevole approssimazione della divisione ("divisione vera") e altre restituiscono il piano ("divisione piano"). A partire da Python 3.0, la divisione vera è specificata da x/y
, mentre la divisione pavimento è specificata dax//y
.
La from __future__ import division
direttiva impone l'uso della divisione di stile Python 3.0.
absolute_import
Consente alla parentesi di racchiudere più import
istruzioni. Per esempio:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
Invece di:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
O:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
with_statement
Aggiunge l'istruzione with
come parola chiave in Python per eliminare la necessità di try/finally
istruzioni. Gli usi comuni di questo sono quando si esegue l'I / O di file come:
with open('workfile', 'r') as f:
read_data = f.read()
print_function
:
Forza l'uso della print()
chiamata di funzione in stile parentesi di Python 3 invece dell'istruzione di print MESSAGE
stile.
unicode_literals
Introduce la sintassi letterale per l' bytes
oggetto. Significa che dichiarazioni come quelle bytes('Hello world', 'ascii')
possono essere semplicemente espresse come b'Hello world'
.
generator_stop
Sostituisce l'uso StopIteration
dell'eccezione utilizzata all'interno delle funzioni del generatore con l' RuntimeError
eccezione.
Un altro uso non menzionato sopra è che l' __future__
istruzione richiede anche l'uso di interpreti Python 2.1+ poiché l'utilizzo di una versione precedente genererà un'eccezione di runtime.
Riferimenti