__future__ — Определения инструкций будущего
Исходный код: Lib/__future__.py
Импорты формы from __future__ import feature называются инструкциями будущего. Компилятор Python обрабатывает их особым образом, чтобы разрешить использование новых возможностей Python в модулях, содержащих инструкцию будущего, до того, как функция станет стандартной.
Хотя эти инструкции будущего получают дополнительный специальный смысл от компилятора Python, они всё же выполняются как любая другая инструкция импорта, и __future__ существует и обрабатывается системой импорта так же, как любой другой модуль Python. Эта конструкция служит трём целям:
- Избежать путаницы для существующих инструментов, анализирующих инструкции импорта и ожидающих найти модули, которые они импортируют.
- Документировать, когда были внесены несовместимые изменения и когда они станут — или были — обязательными. Это форма исполняемой документации, и к ней можно получить доступ программно, импортировав
__future__и проверив его содержимое. - Обеспечить, чтобы инструкции будущего под версиями Python до 2.1 по крайней мере, вызывали исключения во время выполнения (импорт
__future__завершится ошибкой, потому что до 2.1 не было модуля с таким именем).
Содержимое модуля
Описание функций никогда не будет удалено из __future__. После своего введения в Python 2.1 следующие функции были добавлены в язык с помощью этого механизма:
функция | необязательная с | обязательная с | эффект |
|---|---|---|---|
nested_scopes | 2.1.0b1 | 2.2 | PEP 227: Статически вложенные области видимости |
generators | 2.2.0a1 | 2.3 | PEP 255: Простые генераторы |
division | 2.2.0a2 | 3.0 | PEP 238: Изменение оператора деления |
absolute_import | 2.5.0a1 | 3.0 | PEP 328: Импорт: Многострочные и абсолютные/относительные |
with_statement | 2.5.0a1 | 2.6 | PEP 343: Инструкция «with» |
print_function | 2.6.0a2 | 3.0 | PEP 3105: Сделать print функцией |
unicode_literals | 2.6.0a2 | 3.0 | PEP 3112: Символьные литералы в Python 3000 |
generator_stop | 3.5.0b1 | 3.7 | PEP 479: Обработка StopIteration внутри генераторов |
annotations | 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() -
В случае MandatoryRelease, которая ещё не произошла, MandatoryRelease предсказывает версию, в которой функция станет частью языка.
В противном случае MandatoryRelease записывает, когда функция стала частью языка; в версиях на уровне или выше этой, модулям больше не нужна инструкция будущего для использования функции, но они могут продолжать использовать такие импорты.
MandatoryRelease также может быть
None, что означает, что запланированная функция была отменена или что окончательное решение ещё не принято.
-
_Feature.compiler_flag -
CompilerFlag — (битовое) значение флага, которое должно быть передано в четвёртом аргументе встроенной функции
compile()для включения функции в динамически скомпилированный код. Этот флаг хранится в атрибуте_Feature.compiler_flagэкземпляров_Feature.
См. также
- Инструкции будущего
-
Как компилятор обрабатывает импорты будущего.
- PEP 236 - Обратно к __future__
-
Оригинальное предложение для механизма __future__.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/__future__.html