Spec-Zone.ru › Python 3.14

__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 в язык вошли следующие возможности:

возможность

необязательна в

обязательна в

эффект

__future__.nested_scopes

2.1.0b1

2.2

PEP 227: Статически вложенные области видимости

__future__.generators

2.2.0a1

2.3

PEP 255: Простые генераторы

__future__.division

2.2.0a2

3.0

PEP 238: Изменение оператора деления

__future__.absolute_import

2.5.0a1

3.0

PEP 328: Импорты: многострочные и абсолютные/относительные

__future__.with_statement

2.5.0a1

2.6

PEP 343: Инструкция «with»

__future__.print_function

2.6.0a2

3.0

PEP 3105: Сделать print функцией

__future__.unicode_literals

2.6.0a2

3.0

PEP 3112: Байтовые литералы в Python 3000

__future__.generator_stop

3.5.0b1

3.7

PEP 479: Обработка StopIteration внутри генераторов

__future__.annotations

3.7.0b1

Никогда [1]

PEP 563: Отложенная вычисление аннотаций, PEP 649: Отложенное вычисление аннотаций с помощью дескрипторов

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

MandatoryRelease также может быть None, что означает, что от запланированной возможности отказались или решение по ней ещё не принято.

_Feature.compiler_flag

CompilerFlag — это флаг (битовое поле), который следует передать четвёртым аргументом встроенной функции compile(), чтобы включить возможность в динамически компилируемом коде. Этот флаг хранится в атрибуте _Feature.compiler_flag экземпляров _Feature.

[1]

from __future__ import annotations ранее планировалось сделать обязательной в Python 3.10, но изменение отложили и в конечном итоге отменили. Впоследствии эта возможность будет объявлена устаревшей и удалена. См. PEP 649 и PEP 749.

См. также

Инструкции future

Как компилятор обрабатывает импорты future.

PEP 236 — Возвращение к __future__

Исходное предложение о механизме __future__.

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

Spec-Zone.ru

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