Já existem ótimas respostas, mas nenhuma delas trata de uma lista completa de quais __future__
declaração atualmente suporta.
Simplificando, a __future__
declaração força os intérpretes Python a usar recursos mais recentes da linguagem.
Os recursos que ele suporta atualmente são os seguintes:
nested_scopes
Antes do Python 2.1, o código a seguir geraria um NameError :
def f():
...
def g(value):
...
return g(value-1) + 1
...
A from __future__ import nested_scopes
diretiva permitirá que esse recurso seja ativado.
generators
Funções de gerador introduzidas, como a abaixo, para salvar o estado entre chamadas de função sucessivas:
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
division
A divisão clássica é usada nas versões do Python 2.x. Significando que algumas declarações de divisão retornam uma aproximação razoável da divisão ("divisão verdadeira") e outras retornam o piso ("divisão do piso"). A partir do Python 3.0, a divisão verdadeira é especificada por x/y
, enquanto a divisão do piso é especificada porx//y
.
A from __future__ import division
diretiva força o uso da divisão de estilo Python 3.0.
absolute_import
Permite que parênteses incluam várias import
instruções. Por exemplo:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
Ao invés de:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
Ou:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
with_statement
Adiciona a instrução with
como uma palavra-chave no Python para eliminar a necessidade de try/finally
instruções. Usos comuns disso são ao executar E / S de arquivo, como:
with open('workfile', 'r') as f:
read_data = f.read()
print_function
:
Força o uso da print()
chamada de função no estilo parêntese do Python 3 em vez da print MESSAGE
declaração de estilo.
unicode_literals
Introduz a sintaxe literal do bytes
objeto. Significando que declarações como bytes('Hello world', 'ascii')
podem ser simplesmente expressas como b'Hello world'
.
generator_stop
Substitui o uso da StopIteration
exceção usada nas funções do gerador pela RuntimeError
exceção.
Um outro uso não mencionado acima é que a __future__
instrução também requer o uso de intérpretes Python 2.1+, pois o uso de uma versão mais antiga gera uma exceção de tempo de execução.
Referências