__future__ — Определения будущих заявлений

Исходный код: Lib/__future__.py


Импорт формы from __future__ import feature вызывается future statements. Компилятор Python использует специальный регистр, чтобы разрешить использование новых функций Python в модулях, содержащих инструкцию future, до выпуска, в котором эта функция станет стандартной.

Хотя компилятор Python придает этим операторам future дополнительное специальное значение, они по-прежнему выполняются как и любой другой оператор import, и __future__ существует и обрабатывается системой импорта так же, как и любой другой модуль Python. Этот дизайн служит трем целям:

  • Чтобы избежать путаницы в существующих инструментах, которые анализируют инструкции по импорту и ожидают найти импортируемые модули.

  • Для документирования того, когда были внесены несовместимые изменения и когда они станут обязательными. Это форма исполняемой документации, которую можно проверить программным путем, импортировав __future__ и изучив ее содержимое.

  • Чтобы гарантировать, что future statements запускается в версиях, предшествующих версии Python 2.1, по крайней мере, приводит к исключениям во время выполнения (импорт __future__ завершится ошибкой, поскольку до версии 2.1 не было модуля с таким именем).

Содержимое модуля

Ни одно описание функциональности никогда не будет удалено из __future__. С момента его появления в Python 2.1 с помощью этого механизма в языке появились следующие функции:

особенность

необязательный в

обязательный в

эффект

вложенные области

2.1.0в1

2.2

PEP 227: Статически вложенные области

генераторы

2.2.0a1

2.3

PEP 255: Простые генераторы

деление

2.2.0a2

3.0

PEP 238: Изменение оператора деления

абсолютный_импорт

2.5.0a1

3.0

PEP 328: Импорт: Многострочный и абсолютный/относительный

с_установкой

2.5.0a1

2.6

PEP 343: Оператор «with»

функция печати

2.6.0a2

3.0

PEP 3105: Сделать печать функцией

unicode_literals - буквенный код

2.6.0a2

3.0

PEP 3112: Байтовые литералы в Python 3000

остановка генератора

3.5.0в1

3.7

PEP 479: Обработка остановки внутри генераторов

аннотации

3.7.0в1

ТБД [1]

PEP 563: Отложенная оценка аннотаций

class __future__._Feature

Каждое утверждение в __future__.py имеет вид:

FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                       CompilerFlag)

где, как правило, OptionalRelease меньше, чем MandatoryRelease, и оба являются 5-кортежами той же формы, что и 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
)
_Feature.getOptionalRelease()

OptionalRelease записывает первый выпуск, в котором была принята функция.

_Feature.getMandatoryRelease()

В случае обязательного выпуска, который еще не состоялся, MandatoryRelease предсказывает выпуск, в котором функция станет частью языка.

Else MandatoryRelease записывает, когда функция стала частью языка; в релизах, выпущенных в это время или после этого, модулям больше не требуется инструкция future для использования рассматриваемой функции, но они могут продолжать использовать такой импорт.

MandatoryRelease также может быть None, что означает, что запланированная функция была удалена или что решение по ней еще не принято.

_Feature.compiler_flag

CompilerFlag - это флаг (битовое поле), который должен быть передан в четвертом аргументе встроенной функции compile(), чтобы включить функцию в динамически компилируемом коде. Этот флаг хранится в атрибуте _Feature.compiler_flag в экземплярах _Feature.

См.также

Будущие заявления

Как компилятор обрабатывает будущий импорт.

PEP 236 - Назад в __будущее__

Первоначальное предложение по __будущему__ механизму.

Вернуться на верх