__future__ — Определения операторов будущего
Исходный код: Lib/__future__.py
__future__ — это реальный модуль, выполняющий три функции:
- Избегать путаницы существующих инструментов, анализирующих операторы импорта и ожидающих найти модули, которые они импортируют.
- Обеспечить, чтобы операторы будущего работали в выпусках до 2.1, по крайней мере, вызывая исключения во время выполнения (импорт
__future__завершится ошибкой, поскольку модуля с таким именем не было до 2.1). - Документировать, когда были внесены несовместимые изменения и когда они будут — или были — сделаны обязательными. Это форма исполняемой документации, которую можно просмотреть программно, импортировав
__future__и проверив его содержимое.
-
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.
Описание функций никогда не будет удалено из __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: Отложенная оценка аннотаций |
-
1 -
from __future__ import annotationsранее планировалось сделать обязательным в Python 3.10, но Совет по руководству Python дважды принял решение отложить изменение (объявление для Python 3.10; объявление для Python 3.11). Пока не принято окончательное решение. См. также PEP 563 и PEP 649.
См. также
- Операторы будущего
-
Как компилятор обрабатывает импорты будущего.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/__future__.html