Spec-Zone.ru › Python 3.5

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

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

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

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

См. также

Инструкции future
Как компилятор обрабатывает импорты future.

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

Spec-Zone.ru

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