__future__ — Определения будущих заявлений¶
Исходный код: Lib/__future__.py
Импорт формы from __future__ import feature вызывается future statements. Компилятор Python использует специальный регистр, чтобы разрешить использование новых функций Python в модулях, содержащих инструкцию future, до выпуска, в котором эта функция станет стандартной.
Хотя компилятор Python придает этим операторам future дополнительное специальное значение, они по-прежнему выполняются как и любой другой оператор import, и __future__ существует и обрабатывается системой импорта так же, как и любой другой модуль Python. Этот дизайн служит трем целям:
Чтобы избежать путаницы в существующих инструментах, которые анализируют инструкции по импорту и ожидают найти импортируемые модули.
Для документирования того, когда были внесены несовместимые изменения и когда они станут обязательными. Это форма исполняемой документации, которую можно проверить программным путем, импортировав
__future__и изучив ее содержимое.Чтобы гарантировать, что future statements запускается в версиях, предшествующих версии Python 2.1, по крайней мере, приводит к исключениям во время выполнения (импорт
__future__завершится ошибкой, поскольку до версии 2.1 не было модуля с таким именем).
Содержимое модуля¶
Ни одно описание функциональности никогда не будет удалено из __future__. С момента его появления в Python 2.1 с помощью этого механизма в языке появились следующие функции:
особенность |
необязательный в |
обязательный в |
эффект |
|---|---|---|---|
вложенные области |
2.1.0в1 |
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: Сделать печать функцией |
unicode_literals - буквенный код |
2.6.0a2 |
3.0 |
PEP 3112: Байтовые литералы в Python 3000 |
остановка генератора |
3.5.0в1 |
3.7 |
PEP 479: Обработка остановки внутри генераторов |
аннотации |
3.7.0в1 |
ТБД [1] |
PEP 563: Отложенная оценка аннотаций |
- class __future__._Feature¶
Каждое утверждение в
__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 )
- _Feature.getOptionalRelease()¶
OptionalRelease записывает первый выпуск, в котором была принята функция.
- _Feature.getMandatoryRelease()¶
В случае обязательного выпуска, который еще не состоялся, MandatoryRelease предсказывает выпуск, в котором функция станет частью языка.
Else MandatoryRelease записывает, когда функция стала частью языка; в релизах, выпущенных в это время или после этого, модулям больше не требуется инструкция future для использования рассматриваемой функции, но они могут продолжать использовать такой импорт.
MandatoryRelease также может быть
None, что означает, что запланированная функция была удалена или что решение по ней еще не принято.
- _Feature.compiler_flag¶
CompilerFlag - это флаг (битовое поле), который должен быть передан в четвертом аргументе встроенной функции
compile(), чтобы включить функцию в динамически компилируемом коде. Этот флаг хранится в атрибуте_Feature.compiler_flagв экземплярах_Feature.
См.также
- Будущие заявления
Как компилятор обрабатывает будущий импорт.
- PEP 236 - Назад в __будущее__
Первоначальное предложение по __будущему__ механизму.