Документация Python неофициальный перевод

__future__.md

72 строк · 7.3 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.9/library/__future__.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`__future__`](https://python-all.ru/3.9/library/__future__.html#module-__future__) – Определения future-операторов89**Исходный код:** [Lib/\_\_future\_\_.py](https://python-all.ru/src/3.9/Lib/__future__.py)1011---1213[`__future__`](https://python-all.ru/3.9/library/__future__.html#module-__future__) – реальный модуль, и он служит трём целям:1415- Чтобы не запутывать существующие инструменты, которые анализируют операторы import и ожидают найти импортируемые модули.16- Чтобы гарантировать, что [операторы future](https://python-all.ru/3.9/reference/simple_stmts.html#future), выполняемые в версиях, предшествующих 2.1, по крайней мере вызывают исключения времени выполнения (импорт [`__future__`](https://python-all.ru/3.9/library/__future__.html#module-__future__) завершится ошибкой, так как до версии 2.1 модуля с таким именем не существовало).17- Чтобы задокументировать, когда были введены несовместимые изменения, и когда они будут – или были – сделаны обязательными. Это форма исполняемой документации, которую можно программно просмотреть, импортировав [`__future__`](https://python-all.ru/3.9/library/__future__.html#module-__future__) и изучив его содержимое.1819Каждый оператор в `__future__.py` имеет вид:2021```python22FeatureName = _Feature(OptionalRelease, MandatoryRelease,23                       CompilerFlag)24```2526где обычно *OptionalRelease* меньше, чем *MandatoryRelease*, и оба являются 5-кортежами той же формы, что и [`sys.version_info`](https://python-all.ru/3.9/library/sys.html#sys.version_info):2728```python29(PY_MAJOR_VERSION, # 2 в 2.1.0a3; целое число30 PY_MINOR_VERSION, # 1; целое число31 PY_MICRO_VERSION, # 0; целое число32 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" или "final"; строка33 PY_RELEASE_SERIAL # 3; целое число34)35```3637*OptionalRelease* фиксирует первый релиз, в котором эта возможность была принята.3839Если *MandatoryRelease* ещё не наступил, *MandatoryRelease* предсказывает релиз, в котором возможность станет частью языка.4041В противном случае *MandatoryRelease* фиксирует, когда возможность стала частью языка; в релизах начиная с этого или позже модулям больше не нужен future-оператор для использования данной возможности, но они могут продолжать использовать такие импорты.4243*MandatoryRelease* также может быть `None`, что означает, что запланированная возможность была отменена.4445Экземпляры класса `_Feature` имеют два соответствующих метода, `getOptionalRelease()` и `getMandatoryRelease()`.4647*CompilerFlag* – это (битовый) флаг, который следует передавать четвёртым аргументом во встроенную функцию [`compile()`](https://python-all.ru/3.9/library/functions.html#compile), чтобы включить возможность в динамически компилируемом коде. Этот флаг хранится в атрибуте `compiler_flag` экземпляров `_Feature`.4849Ни одно описание возможности никогда не будет удалено из [`__future__`](https://python-all.ru/3.9/library/__future__.html#module-__future__). Начиная с его появления в Python 2.1, следующие возможности вошли в язык с помощью этого механизма:5051| Возможность | Необязательно в | Обязательно в | Эффект |52| --- | --- | --- | --- |53| nested\_scopes | 2.1.0b1 | 2.2 | [**PEP 227**](https://python-all.ru/3.9/library/__future__.html): *Статически вложенные области видимости* |54| generators | 2.2.0a1 | 2.3 | [**PEP 255**](https://python-all.ru/3.9/library/__future__.html): *Простые генераторы* |55| division | 2.2.0a2 | 3.0 | [**PEP 238**](https://python-all.ru/3.9/library/__future__.html): *Изменение оператора деления* |56| absolute\_import | 2.5.0a1 | 3.0 | [**PEP 328**](https://python-all.ru/3.9/library/__future__.html): *Импорты: многострочные и абсолютные/относительные* |57| with\_statement | 2.5.0a1 | 2.6 | [**PEP 343**](https://python-all.ru/3.9/library/__future__.html): *Оператор with* |58| print\_function | 2.6.0a2 | 3.0 | [**PEP 3105**](https://python-all.ru/3.9/library/__future__.html): *Сделать print функцией* |59| unicode\_literals | 2.6.0a2 | 3.0 | [**PEP 3112**](https://python-all.ru/3.9/library/__future__.html): *Байтовые литералы в Python 3000* |60| generator\_stop | 3.5.0b1 | 3.7 | [**PEP 479**](https://python-all.ru/3.9/library/__future__.html): *Обработка StopIteration внутри генераторов* |61| аннотации | 3.7.0b1 | Будет определено [1](https://python-all.ru/3.9/library/__future__.html#id2) | [**PEP 563**](https://python-all.ru/3.9/library/__future__.html): *Отложенное вычисление аннотаций* |6263**[1](https://python-all.ru/3.9/library/__future__.html#id1)**6465`from __future__ import annotations` ранее был запланирован к обязательному внедрению в Python 3.10, но Совет управляющих Python дважды решил отложить изменение ([объявление для Python 3.10](https://python-all.ru/3.9/library/__future__.html); [объявление для Python 3.11](https://python-all.ru/3.9/library/__future__.html)). Окончательное решение ещё не принято. См. также [**PEP 563**](https://python-all.ru/3.9/library/__future__.html) и [**PEP 649**](https://python-all.ru/3.9/library/__future__.html).6667> **См. также**68>69> **[Future-операторы](https://python-all.ru/3.9/reference/simple_stmts.html#future)**70>71> Как компилятор обрабатывает future-импорты.72