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


__future__ является реальным модулем и служит трем целям:

  • Постараться не путать существующие анализирующие import операторы инструменты и ожидают находить модули, которые они импортируют.
  • Чтобы будущие операторы выполнялись в выпусках до 2.1, по крайней мере, генерируйте исключения во время выполнения (импорт __future__ завершится неуспешно, поскольку до 2.1 не было модуля с таким именем).
  • Задокументировать, когда были введены несовместимые изменения и когда они будут или были сделаны обязательными. Это форма исполняемой документации, проверяемую программно, импортировав __future__ и изучив его содержимое.

У каждого оператора в __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
)

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

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

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

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

сущности класса _Feature имеют два соответствующих метода, getOptionalRelease() и getMandatoryRelease().

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

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

особенность опционален в обязателен в эффект
nested_scopes 2.1.0b1 2.2 PEP 227: Статически вложенные области
generators 2.2.0a1 2.3 PEP 255: Простые генераторы
division 2.2.0a2 3.0 PEP 238: Изменение оператора деления
absolute_import 2.5.0a1 3.0 PEP 328: Импорт: многострочный и абсолютный/относительный
with_statement 2.5.0a1 2.6 PEP 343: Оператор «with»
print_function 2.6.0a2 3.0 PEP 3105: Создана print функция
unicode_literals 2.6.0a2 3.0 PEP 3112: Байтные литералы в Python 3000
generator_stop 3.5.0b1 3.7 PEP 479: StopIteration обработка внутри генераторов
annotations 3.7.0b1 3.10 PEP 563: Отложенное вычисление аннотаций

См.также

Будущие операторы
Как компилятор относится к будущим импортам.