Содержание страницы
__future__ – Определения future-операторов¶__future__ – Future statement definitions
Исходный код: Lib/__future__.py
Импорты вида from __future__ import feature называются
future statements. Компилятор Python обрабатывает их особым образом,
чтобы разрешить использование новых возможностей Python в модулях, содержащих такой future-оператор,
ещё до выхода версии, в которой эта возможность становится стандартной.
Хотя компилятор Python придаёт этим future-операторам дополнительный особый смысл,
они выполняются как любой другой оператор import, и модуль __future__ существует и обрабатывается системой импорта
так же, как любой другой модуль Python. Такое устройство преследует три цели:
Чтобы не запутывать существующие инструменты, которые анализируют операторы import и ожидают найти импортируемые модули.
Чтобы задокументировать, когда были введены несовместимые изменения, и когда они будут – или были – сделаны обязательными. Это форма исполняемой документации, которую можно программно просмотреть, импортировав
__future__и изучив его содержимое.Чтобы гарантировать, что future statements в версиях, предшествующих Python 2.1, по крайней мере вызывают исключения времени выполнения (импорт
__future__будет неудачным, потому что до версии 2.1 модуля с таким именем не существовало).
Содержимое модуля¶Module Contents
Ни одно описание возможности никогда не будет удалено из __future__. Начиная с его
появления в Python 2.1, следующие возможности вошли в язык с помощью этого механизма:
Возможность |
Необязательно в |
Обязательно в |
Эффект |
|---|---|---|---|
|
2.1.0b1 |
2.2 |
PEP 227: Статически вложенные области видимости |
|
2.2.0a1 |
2.3 |
PEP 255: Простые генераторы |
|
2.2.0a2 |
3.0 |
PEP 238: Изменение оператора деления |
|
2.5.0a1 |
3.0 |
PEP 328: Импорты: многострочные и абсолютные/относительные |
|
2.5.0a1 |
2.6 |
PEP 343: Оператор “with” |
|
2.6.0a2 |
3.0 |
PEP 3105: Превращение print в функцию |
|
2.6.0a2 |
3.0 |
PEP 3112: Байтовые литералы в Python 3000 |
|
3.5.0b1 |
3.7 |
PEP 479: Обработка StopIteration внутри генераторов |
|
3.7.0b1 |
Никогда [1] |
PEP 563: Отложенное вычисление аннотаций, PEP 649: Отложенное вычисление аннотаций с помощью дескрипторов |
- class __future__._Feature¶
Каждый оператор в
__future__.pyимеет вид:FeatureName = _Feature(OptionalRelease, MandatoryRelease, CompilerFlag)
где обычно OptionalRelease меньше, чем MandatoryRelease, и оба являются 5-кортежами той же формы, что и
sys.version_info:(PY_MAJOR_VERSION, # 2 в 2.1.0a3; целое число PY_MINOR_VERSION, # 1; целое число PY_MICRO_VERSION, # 0; целое число PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" или "final"; строка PY_RELEASE_SERIAL # 3; целое число )
- _Feature.getOptionalRelease()¶
OptionalRelease фиксирует первый релиз, в котором эта возможность была принята.
- _Feature.getMandatoryRelease()¶
Если MandatoryRelease ещё не наступил, MandatoryRelease предсказывает релиз, в котором возможность станет частью языка.
В противном случае MandatoryRelease фиксирует, когда возможность стала частью языка; в релизах начиная с этого или позже модулям больше не нужен future-оператор для использования данной возможности, но они могут продолжать использовать такие импорты.
MandatoryRelease также может быть
None, что означает, что запланированная возможность была отменена или пока не определена.
- _Feature.compiler_flag¶
CompilerFlag – это (битовый) флаг, который следует передавать четвёртым аргументом во встроенную функцию
compile(), чтобы включить возможность в динамически компилируемом коде. Этот флаг хранится в атрибуте_Feature.compiler_flagэкземпляров_Feature.
См. также
- Future-операторы
Как компилятор обрабатывает future-импорты.
- PEP 236 – Назад в __future__
Оригинальное предложение механизма __future__.
Эта страница – перевод. Оригинал на английском – docs.python.org. Нашли неточность? Сообщите нам.