__future__
— Определения будущих инструкций¶
Исходный код: Lib/__future__.py
__future__
является реальным модулем и служит трем целям:
- Постараться не путать существующие инструменты, которые анализируют import инструкции и ожидают находить модули, которые они импортируют.
- Для обеспечения выполнения будущие инструкции в версиях до 2.1 по крайней мере
yield исключений во время выполнения (импорт
__future__
завершится неуспешно, поскольку до 2.1 не было модуля с таким именем). - Для документирования, когда несовместимые изменения были введены, и когда они будут
— или были — сделанным обязательным. Это форма выполнимой
документации и может быть проверен программно через импортирование
__future__
и проверки его содержания.
Каждая инструкция в __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
)
OptionalRelease записывает первый выпуск, в котором была принята функция.
В случае MandatoryRelease, который еще не произошел, MandatoryRelease предсказывает выпуск, в котором особенность станет частью языка.
Иначе MandatoryRelease записи, когда функция стала частью языка; в версиях на этом этапе или после этого модули больше не нуждаются в будущем инструкция для использования рассматриваемой функции, но могут продолжать использовать такой импорт.
MandatoryRelease также может быть None
, что означает, что запланированная
функция была отброшена.
сущности класса _Feature
имеют два соответствующих метода, getOptionalRelease()
и
getMandatoryRelease()
.
CompilerFlag - флаг (битового поля), который должен быть передан в четвертом
аргументе встроенной функции compile()
, чтобы включить функцию в динамически
скомпилированных код. Этот флаг сохраняется в 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 | 3.10 | PEP 563: Отложенная оценка аннотаций |
См.также
- Будущие операторы
- Как компилятор относится к будущим импортам.