# `__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.

Дивись також

Майбутні заяви

  Як компілятор обробляє майбутні імпорти.