Spec-Zone.ru › Python 3.11

__future__ — Определения операторов будущего

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

__future__ — это реальный модуль, выполняющий три функции:

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

Описание функций никогда не будет удалено из __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.11/library/__future__.html

Spec-Zone.ru

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