__future__ — Определения инструкций future
Исходный код: Lib/__future__.py
Импорты вида from __future__ import feature называются инструкциями future. Компилятор Python обрабатывает их особым образом, чтобы разрешить использование новых возможностей Python в модулях с инструкцией future до выпуска версии, в которой эта возможность станет стандартной.
Хотя компилятор Python придаёт этим инструкциям future дополнительный особый смысл, они по-прежнему выполняются как любые другие инструкции импорта, а __future__ существует и обрабатывается системой импорта так же, как любой другой модуль Python. У этого подхода три цели:
- Не вводить в заблуждение существующие инструменты, анализирующие инструкции импорта и ожидающие найти импортируемые модули.
- Документировать, когда были введены несовместимые изменения и когда они станут — или стали — обязательными. Это форма исполняемой документации, которую можно программно изучить, импортировав
__future__и проанализировав его содержимое. - Гарантировать, что инструкции future при запуске в выпусках до 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: Инструкция «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: Отложенное вычисление аннотаций |
-
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 ещё не состоялся, MandatoryRelease указывает предполагаемый выпуск, в котором возможность станет частью языка.
В противном случае MandatoryRelease указывает, когда возможность стала частью языка; в этом и последующих выпусках модулям больше не нужна инструкция future для использования этой возможности, однако они могут продолжать использовать такие импорты.
MandatoryRelease также может быть
None, что означает, что от запланированной возможности отказались или решение по ней ещё не принято.
-
_Feature.compiler_flag -
CompilerFlag — это флаг (битовое поле), который следует передать в качестве четвёртого аргумента встроенной функции
compile(), чтобы включить возможность в динамически скомпилированном коде. Этот флаг хранится в атрибуте_Feature.compiler_flagэкземпляров_Feature.
См. также
- Инструкции future
-
Как компилятор обрабатывает импорты future.
- PEP 236 — Возвращение к __future__
-
Первоначальное предложение о механизме __future__.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/__future__.html