Spec-Zone.ru › Python 3.8

__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

3.10

PEP 563: Отложенная оценка аннотаций

См. также

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

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

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

Spec-Zone.ru

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