Spec-Zone.ru › Python 2.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

См. также

Инструкции __future__

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

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

Spec-Zone.ru

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