__future__ – определения операторов future¶__future__ – Future statement definitions
__future__ – настоящий модуль, служащий трём целям:
- Чтобы не запутывать существующие инструменты, которые анализируют операторы import и ожидают найти импортируемые модули.
- Чтобы гарантировать, что future-операторы, запущенные в версиях до 2.1, как минимум вызывают исключения времени выполнения (импорт __future__ завершится ошибкой, поскольку до версии 2.1 не существовало модуля с таким именем).
- Чтобы документировать, когда были введены несовместимые изменения и когда они станут – или стали – обязательными. Это форма исполняемой документации, и её можно программно просмотреть, импортировав __future__ и изучив его содержимое.
Каждая инструкция в __future__.py имеет вид:
FeatureName = _Feature(OptionalRelease, MandatoryRelease,
CompilerFlag)
где обычно OptionalRelease меньше MandatoryRelease, и оба являются 5-кортежами того же вида, что и sys.version_info:
(PY_MAJOR_VERSION, # 2 в 2.1.0a3; целое число
PY_MINOR_VERSION, # 1; целое число
PY_MICRO_VERSION, # 0; целое число
PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" или "final"; строка
PY_RELEASE_SERIAL # 3; целое число
)
OptionalRelease фиксирует первый релиз, в котором эта возможность была принята.
Если MandatoryRelease ещё не наступил, MandatoryRelease предсказывает релиз, в котором возможность станет частью языка.
В противном случае MandatoryRelease фиксирует, когда возможность стала частью языка; в релизах начиная с этого или позже модулям больше не нужен future-оператор для использования данной возможности, но они могут продолжать использовать такие импорты.
MandatoryRelease также может быть None, что означает, что запланированная возможность была отменена.
Экземпляры класса _Feature имеют два соответствующих метода: getOptionalRelease() и getMandatoryRelease().
CompilerFlag – это (битовый) флаг, который должен передаваться четвёртым аргументом во встроенную функцию compile() для включения этой возможности в динамически компилируемом коде. Этот флаг хранится в атрибуте compiler_flag на экземплярах _Feature.
Ни одно описание возможности никогда не будет удалено из __future__.