__future__ — Definiciones de declaraciones futuras

Código fuente: Lib/__future__.py


__future__ es un módulo real y tiene tres propósitos:

  • Para evitar confundir las herramientas existentes que analizan las declaraciones de importación y esperan encontrar los módulos que están importando.

  • Para garantizar que las declaraciones futuras se ejecuten en versiones anteriores a 2.1 al menos produzcan excepciones en tiempo de ejecución (la importación de __future__ fallará, porque no había ningún módulo con ese nombre antes de 2.1).

  • Documentar cuándo se introdujeron cambios incompatibles y cuándo serán — o fueron — obligatorios. Esta es una forma de documentación ejecutable y se puede inspeccionar mediante programación importando __future__ y examinando su contenido.

Cada declaración en __future__.py tiene la forma:

FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                       CompilerFlag)

donde, normalmente, OptionalRelease es menor que MandatoryRelease y ambos son 5-tuplas de la misma forma que sys.version_info:

(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
 PY_MINOR_VERSION, # the 1; an int
 PY_MICRO_VERSION, # the 0; an int
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
 PY_RELEASE_SERIAL # the 3; an int
)

OptionalRelease registra la primera versión en la que se aceptó la característica.

En el caso de un MandatoryRelease que aún no se ha producido, MandatoryRelease predice el lanzamiento en el que la característica pasará a formar parte del lenguaje.

De otro modo, MandatoryRelease registra cuándo la característica se convirtió en parte del lenguaje; en versiones en o después de este, los módulos ya no necesitan una declaración futura para usar la característica en cuestión, pero pueden continuar usando dichas importaciones.

MandatoryRelease también puede ser None, lo que significa que se eliminó una característica planificada.

Las instancias de la clase _Feature tienen dos métodos correspondientes, getOptionalRelease() y getMandatoryRelease().

CompilerFlag es el indicador (campo de bits) que debe pasarse en el cuarto argumento a la función incorporada compile() para habilitar la característica en código compilado dinámicamente. Esta bandera se almacena en el atributo compiler_flag en las instancias _Feature.

Ninguna descripción de característica se eliminará de __future__. Desde su introducción en Python 2.1, las siguientes características han encontrado su camino en el lenguaje usando este mecanismo:

característica

opcional en

obligatorio en

efecto

nested_scopes

2.1.0b1

2.2

PEP 227: Ámbitos anidados estáticamente

generadores

2.2.0a1

2.3

PEP 255: Generadores simples

división

2.2.0a2

3.0

PEP 238: Cambio de operador de división

absolute_import

2.5.0a1

3.0

PEP 328: Importaciones: Multilínea y Absoluto/Relativo

with_statement

2.5.0a1

2.6

PEP 343: La declaración «with»

print_function

2.6.0a2

3.0

PEP 3105: Hacer de print una función

unicode_literals

2.6.0a2

3.0

PEP 3112: Bytes literales en Python 3000

generator_stop

3.5.0b1

3.7

PEP 479: Manejo de StopIteration dentro de generadores

anotaciones

3.7.0b1

TBD 1

PEP 563: Evaluación pospuesta de anotaciones

1

from __future__ import annotations was previously scheduled to become mandatory in Python 3.10, but the Python Steering Council twice decided to delay the change (announcement for Python 3.10; announcement for Python 3.11). No final decision has been made yet. See also PEP 563 and PEP 649.

Ver también

Declaraciones Futuras

Cómo trata el compilador las importaciones futuras.