__future__ — Определения инструкций будущего
Исходный код: Lib/__future__.py
__future__ — это настоящий модуль, выполняющий три задачи:
- Избегать путаницы с существующими инструментами, анализирующими инструкции импорта и ожидающими найти импортируемые модули.
- Обеспечить, чтобы инструкции будущего по крайней мере в выпусках до 2.1 вызывали исключения во время выполнения (импорт
__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: Отложенная оценка аннотаций |
См. также
- Инструкции будущего
-
Как компилятор обрабатывает импорты будущего.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/__future__.html