Spec-Zone.ru › Python 3.12

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

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

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

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

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

TBD [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 прогнозирует выпуск, в котором функция станет частью языка.

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

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.

См. также

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

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

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