__future__.md
1> **Источник:** https://python-all.ru/3/library/__future__.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `__future__` – Определения future-операторов89**Исходный код:** [Lib/\_\_future\_\_.py](https://python-all.ru/src/3.14/Lib/__future__.py)1011---1213Импорты вида `from __future__ import feature` называются [future statements](https://python-all.ru/3/reference/simple_stmts.html#future). Компилятор Python обрабатывает их особым образом, чтобы разрешить использование новых возможностей Python в модулях, содержащих такой future-оператор, ещё до выхода версии, в которой эта возможность становится стандартной.1415Хотя компилятор Python придаёт этим future-операторам дополнительный особый смысл, они выполняются как любой другой оператор import, и модуль `__future__` существует и обрабатывается системой импорта так же, как любой другой модуль Python. Такое устройство преследует три цели:1617- Чтобы не запутывать существующие инструменты, которые анализируют операторы import и ожидают найти импортируемые модули.18- Чтобы задокументировать, когда были введены несовместимые изменения, и когда они будут – или были – сделаны обязательными. Это форма исполняемой документации, которую можно программно просмотреть, импортировав `__future__` и изучив его содержимое.19- Чтобы гарантировать, что [future statements](https://python-all.ru/3/reference/simple_stmts.html#future) в версиях, предшествующих Python 2.1, по крайней мере вызывают исключения времени выполнения (импорт `__future__` будет неудачным, потому что до версии 2.1 модуля с таким именем не существовало).2021## Содержимое модуля2223Ни одно описание возможности никогда не будет удалено из `__future__`. Начиная с его появления в Python 2.1, следующие возможности вошли в язык с помощью этого механизма:2425| Возможность | Необязательно в | Обязательно в | Эффект |26| --- | --- | --- | --- |27| \_\_future\_\_.nested\_scopes | 2.1.0b1 | 2.2 | [**PEP 227**](https://python-all.ru/3/library/__future__.html): *Статически вложенные области видимости* |28| \_\_future\_\_.generators | 2.2.0a1 | 2.3 | [**PEP 255**](https://python-all.ru/3/library/__future__.html): *Простые генераторы* |29| \_\_future\_\_.division | 2.2.0a2 | 3.0 | [**PEP 238**](https://python-all.ru/3/library/__future__.html): *Изменение оператора деления* |30| \_\_future\_\_.absolute\_import | 2.5.0a1 | 3.0 | [**PEP 328**](https://python-all.ru/3/library/__future__.html): *Импорты: многострочные и абсолютные/относительные* |31| \_\_future\_\_.with\_statement | 2.5.0a1 | 2.6 | [**PEP 343**](https://python-all.ru/3/library/__future__.html): *Оператор “with”* |32| \_\_future\_\_.print\_function | 2.6.0a2 | 3.0 | [**PEP 3105**](https://python-all.ru/3/library/__future__.html): *Превращение print в функцию* |33| \_\_future\_\_.unicode\_literals | 2.6.0a2 | 3.0 | [**PEP 3112**](https://python-all.ru/3/library/__future__.html): *Байтовые литералы в Python 3000* |34| \_\_future\_\_.generator\_stop | 3.5.0b1 | 3.7 | [**PEP 479**](https://python-all.ru/3/library/__future__.html): *Обработка StopIteration внутри генераторов* |35| \_\_future\_\_.annotations | 3.7.0b1 | Никогда [\[1\]](https://python-all.ru/3/library/__future__.html#id2) | [**PEP 563**](https://python-all.ru/3/library/__future__.html): *Отложенное вычисление аннотаций*, [**PEP 649**](https://python-all.ru/3/library/__future__.html): *Отложенное вычисление аннотаций с помощью дескрипторов* |3637#### `class __future__._Feature`3839Каждый оператор в `__future__.py` имеет вид:4041```python42FeatureName = _Feature(OptionalRelease, MandatoryRelease,43 CompilerFlag)44```4546где обычно *OptionalRelease* меньше, чем *MandatoryRelease*, и оба являются 5-кортежами той же формы, что и [`sys.version_info`](https://python-all.ru/3/library/sys.html#sys.version_info):4748```python49(PY_MAJOR_VERSION, # 2 в 2.1.0a3; целое число50 PY_MINOR_VERSION, # 1; целое число51 PY_MICRO_VERSION, # 0; целое число52 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" или "final"; строка53 PY_RELEASE_SERIAL # 3; целое число54)55```5657#### `_Feature.getOptionalRelease()`5859*OptionalRelease* фиксирует первый релиз, в котором эта возможность была принята.6061#### `_Feature.getMandatoryRelease()`6263Если *MandatoryRelease* ещё не наступил, *MandatoryRelease* предсказывает релиз, в котором возможность станет частью языка.6465В противном случае *MandatoryRelease* фиксирует, когда возможность стала частью языка; в релизах начиная с этого или позже модулям больше не нужен future-оператор для использования данной возможности, но они могут продолжать использовать такие импорты.6667*MandatoryRelease* также может быть `None`, что означает, что запланированная возможность была отменена или пока не определена.6869#### `_Feature.compiler_flag`7071*CompilerFlag* – это (битовый) флаг, который следует передавать четвёртым аргументом во встроенную функцию [`compile()`](https://python-all.ru/3/library/functions.html#compile), чтобы включить возможность в динамически компилируемом коде. Этот флаг хранится в атрибуте `_Feature.compiler_flag` экземпляров [`_Feature`](https://python-all.ru/3/library/__future__.html#future__._Feature).7273\[[1](https://python-all.ru/3/library/__future__.html#id1)\]7475`from __future__ import annotations` ранее планировалось сделать обязательным в Python 3.10, но изменение было отложено и в конечном счёте отменено. Эта возможность со временем устареет и будет удалена. См. [**PEP 649**](https://python-all.ru/3/library/__future__.html) и [**PEP 749**](https://python-all.ru/3/library/__future__.html).7677> **См. также**78>79> **[Future-операторы](https://python-all.ru/3/reference/simple_stmts.html#future)**80>81> Как компилятор обрабатывает future-импорты.82>83> **[**PEP 236**](https://python-all.ru/3/library/__future__.html) – Назад в \_\_future\_\_**84>85> Оригинальное предложение механизма \_\_future\_\_.86