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

Дивись також

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

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