Spec-Zone.ru › Python 3.11

__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: Литералы bytes в 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.11/library/__future__.html

Spec-Zone.ru

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