__future__
— Future statement definitions¶
Вихідний код: Lib/__future__.py
__future__
is a real module, and serves three purposes:
Щоб не плутати існуючі інструменти, які аналізують оператори імпорту та очікують знайти модулі, які вони імпортують.
To ensure that future statements run under releases prior to 2.1 at least yield runtime exceptions (the import of
__future__
will fail, because there was no module of that name prior to 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 may also be None
, meaning that a planned feature got
dropped.
Instances of class _Feature
have two corresponding methods,
getOptionalRelease()
and getMandatoryRelease()
.
CompilerFlag is the (bitfield) flag that should be passed in the fourth
argument to the built-in function compile()
to enable the feature in
dynamically compiled code. This flag is stored in the compiler_flag
attribute on _Feature
instances.
Жоден опис функції ніколи не буде видалено з __future__
. З моменту появи в Python 2.1 наступні функції знайшли шлях до мови за допомогою цього механізму:
функція |
факультативно в |
обов’язкове в |
ефект |
---|---|---|---|
вкладені_області |
2.1.0b1 |
2.2 |
PEP 227: Статично вкладені області |
генератори |
2.2.0a1 |
2.3 |
PEP 255: Прості генератори |
поділ |
2.2.0a2 |
3.0 |
PEP 238: Зміна оператора ділення |
абсолютний_імпорт |
2.5.0a1 |
3.0 |
PEP 328: Імпорт: багаторядковий і абсолютний/відносний |
with_statement |
2.5.0a1 |
2.6 |
PEP 343: Заява «з» |
функція друку |
2.6.0a2 |
3.0 |
PEP 3105: Зробити функцію друку |
unicode_literals |
2.6.0a2 |
3.0 |
PEP 3112: Байтові літерали в Python 3000 |
generator_stop |
3.5.0b1 |
3.7 |
PEP 479: Обробка StopIteration всередині генераторів |
анотації |
3.7.0b1 |
Уточнюється 1 |
PEP 563: Відкладена оцінка анотацій |
- 1
from __future__ import annotations
раніше було заплановано, щоб стати обов’язковим у Python 3.10, але Керівна рада Python двічі вирішила відкласти цю зміну (оголошення для Python 3.10; оголошення для Python 3.11). Остаточне рішення ще не прийнято. Дивіться також PEP 563 і PEP 649.
Дивись також
- Майбутні заяви
Як компілятор обробляє майбутні імпорти.