Ya hay algunas respuestas excelentes, pero ninguna de ellas aborda una lista completa de lo que __future__
declaración admite actualmente.
En pocas palabras, la __future__
declaración obliga a los intérpretes de Python a usar funciones más nuevas del lenguaje.
Las características que admite actualmente son las siguientes:
nested_scopes
Antes de Python 2.1, el siguiente código generaría un NameError :
def f():
...
def g(value):
...
return g(value-1) + 1
...
La from __future__ import nested_scopes
directiva permitirá que esta característica esté habilitada.
generators
Se introdujeron funciones generadoras como la siguiente para guardar el estado entre llamadas de función sucesivas:
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
division
La división clásica se usa en las versiones de Python 2.x. Lo que significa que algunas declaraciones de división devuelven una aproximación razonable de la división ("división verdadera") y otras devuelven el piso ("división del piso"). A partir de Python 3.0, la división verdadera se especifica por x/y
, mientras que la división de piso se especifica porx//y
.
La from __future__ import division
directiva obliga al uso de la división de estilo Python 3.0.
absolute_import
Permite paréntesis para encerrar múltiples import
declaraciones. Por ejemplo:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
En vez de:
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
Agrega la declaración with
como una palabra clave en Python para eliminar la necesidad de try/finally
declaraciones. Los usos comunes de esto son al hacer E / S de archivos como:
with open('workfile', 'r') as f:
read_data = f.read()
print_function
:
Fuerza el uso de la print()
llamada a la función de estilo de paréntesis de Python 3 en lugar de la print MESSAGE
declaración de estilo.
unicode_literals
Introduce la sintaxis literal para el bytes
objeto. Lo que significa que declaraciones como bytes('Hello world', 'ascii')
pueden expresarse simplemente como b'Hello world'
.
generator_stop
Reemplaza el uso de la StopIteration
excepción utilizada dentro de las funciones del generador con la RuntimeError
excepción.
Otro uso no mencionado anteriormente es que la __future__
declaración también requiere el uso de intérpretes Python 2.1+ ya que el uso de una versión anterior generará una excepción en tiempo de ejecución.
Referencias