Spec-Zone.ru › Python 3.10

__future__ — Определения инструкций будущего

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

__future__ — это реальный модуль, и он выполняет три задачи:

  • Избежать путаницы у существующих инструментов, которые анализируют инструкции импорта и ожидают найти модули, которые они импортируют.
  • Обеспечить, чтобы инструкции будущего при выполнении на версиях до 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

TBD 1

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

1

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

См. также

Инструкции будущего

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

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

Spec-Zone.ru

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