Spec-Zone.ru › Python 3.13

__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.13/library/__future__.html

Spec-Zone.ru

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