__future__ — Будущие определения утверждений

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


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

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

  • Для того, чтобы future statements, запущенные под релизами до 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 записывает первый выпуск, в котором функция была принята.

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

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

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

Экземпляры класса _Feature имеют два соответствующих метода, getOptionalRelease() и getMandatoryRelease().

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

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

особенность

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

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

эффект

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

2.1.0b1

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: *Утверждение «с»

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

2.6.0a2

3.0

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

уникодовые_литералы

2.6.0a2

3.0

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

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

3.5.0b1

3.7

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

аннотации

3.7.0b1

TBD 1

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

1

from __future__ import annotations ранее планировалось сделать обязательным в Python 3.10, но Руководящий совет Python дважды решил отложить это изменение (announcement for Python 3.10; announcement for Python 3.11). Окончательное решение пока не принято. См. также PEP 563 и PEP 649.

См.также

Заявления о будущем

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

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