Spec-Zone.ru › Python 3.12

__future__ — определения инструкций future

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

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

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

  • Не вводить в заблуждение существующие инструменты, анализирующие инструкции импорта и ожидающие найти импортируемые модули.
  • Документировать, когда были введены несовместимые изменения и когда они станут — или стали — обязательными. Это форма исполняемой документации, которую можно исследовать программно, импортировав __future__ и изучив его содержимое.
  • Обеспечить, чтобы инструкции future в версиях до Python 2.1 как минимум вызывали исключения во время выполнения (импорт __future__ завершится ошибкой, поскольку до версии 2.1 модуля с таким именем не существовало).

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

Описание возможностей никогда не будет удалено из __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

пока не определено [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 ещё не наступил, это значение указывает предполагаемый выпуск, в котором возможность станет частью языка.

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

Значение MandatoryRelease также может быть None, что означает, что от запланированной возможности отказались или решение по ней ещё не принято.

_Feature.compiler_flag

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

[1]

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

См. также

Инструкции future

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

PEP 236 — Возвращение к __future__

Первоначальное предложение о механизме __future__.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/__future__.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API