Spec-Zone.ru › Python 3.6

__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.6/library/__future__.html

Spec-Zone.ru

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