Spec-Zone.ru › Python 3.7

__future__ — Определения инструкций future

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

__future__ — это настоящий модуль, выполняющий три задачи:

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

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

4.0

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

См. также

Инструкции future

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

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

Spec-Zone.ru

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