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