Spec-Zone.ru › Python 3.9

__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–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/__future__.html

Spec-Zone.ru

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