Что нового ожидает нас в этой версии и в будущих релизах?
Вышел полный релиз Python 3.9!
Очевидно, что эта версия знаменует собой переломный момент в эволюции Python. Мы рассмотрим:
> Новый вектор развития Python
- Смена парсера
- Цикл обновлений
> Новый функционал
- Подсказки типов
- Новые строковые методы
- Объединение словарей
> Новый вектор развития Python
- Смена парсера
- Цикл обновлений
> Новый функционал
- Подсказки типов
- Новые строковые методы
- Объединение словарей
Новый вектор развития Python
В этом релизе есть два важных обновления, которые не приведут к резким переменам, но направят эволюцию Python как языка программирования в немного ином направлении.
В двух словах, суть обновлений заключается в:
- новом парсере Python;
- менее глобальном, но более частом выпуске релизов.
LL(1) и PEG
Около 30 лет назад Гвидо ван Россум создал один из первых фрагментов кода, когда-либо написанных для Python — pgen. Он до сих пор используется в качестве синтаксического анализатора Python.
Pgen использует грамматику, основанную на LL(1), то есть парсер LL(1) анализирует код сверху вниз, слева направо с возможностью просмотра только одного токена.
Это по существу означает, что разработка новых возможностей Python ограничена, потому что:
- LL(1) анализирует только один токен, что не позволяет создавать хорошую грамматику.
- Python уже содержит грамматику non-LL(1). То есть текущий парсер использует слишком много обходных путей, чрезмерно усложняя процесс.
- Даже при наличии обходных путей возможности ограничены. Правила можно обойти, но не нарушить.
- С помощью LL(1) конкретный леворекурсивный синтаксис может вызвать бесконечный цикл в дереве синтаксического анализа, вызывая переполнение стека.
Эти особенности LL(1) ограничивают потенциал развития Python.
Python 3.9 вырвался из этих ограничений благодаря блестящему новому парсеру PEG, описанному в рамках PEP 617.
Сразу же мы этого не заметим. Никакие изменения, использующие преимущества нового синтаксического анализатора, не будут внесены до выхода Python 3.10, но после этого язык будет освобожден от оков LL(1).
Цикл обновлений
До выпуска Python 3.9 новая версия языка выходила раз в полтора года, а теперь она будет появляться раз в год [PEP 602]. Что это значит:
- В релизах будет меньше нового функционала.
- Изменения будут постепенными, однако выпуск новых функций и исправление ошибок будет происходить быстрее.
- Более стабильный график релизов. Теперь мы знаем, что новый Python будет выходить каждый октябрь!
Таким образом, разработчики фактически делают фокус на небольших, но постепенных изменениях ежегодно, а не на глобальных обновлениях через каждые полтора года. В то же время ожидается, что скорость развития останется прежней.
Новый функционал
Наряду с этими организационными изменениями версия 3.9 порадует нас некоторыми новыми функциями!
Подсказки типов
В далеком 2008 году Python 3 представил средства для аннотирования функций — предшественников подсказок типов. Они были не идеальны, но это было только начало.
Впоследствии были добавлены новые функции. Сейчас релиз 3.9 объединяет все эти различные функции вместе с аккуратным новым синтаксисом.
Мы можем легко указать ожидаемые типы данных переменных. Если мы затем напишем что-то бессмысленное, например попытаемся преобразовать строку в целое число, редактор обнаружит проблему.
Программа не выдаст сообщение об ошибке (к сожалению), но в любом случае очень поможет в работе с большими объемами кода. Давайте взглянем на новый синтаксис.
В Python можно складывать две строки с помощью +
. Таким образом, в данной функции add_int
, соединяющей две одинаковые строки, ошибка не возникнет:
При помощи нового функционала мы просто указываем ожидаемый тип как : int
, и редактор немедленно обнаруживает ошибку:
Мы также можем использовать синтаксис -> type
, чтобы получить сведения об ожидаемых типах:
И мы не ограничены одними лишь простыми, стандартными типами!
Строковые методы
Это изменение не такое впечатляющее, как остальные, но тем не менее пользуются строковыми методами часто. Появились два новых метода удаления строковых префиксов и суффиксов:
"foo bar".removeprefix("fo")
[Out]: 'o bar'
"foo bar".removesuffix("ar")
[Out]: 'foo b'
Объединение cловарей
Теперь у нас появились два новых оператора для объединения словарей.
Это оператор слияния |
:
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
c = a | b
print(c)
[Out]: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
И оператор обновления, который выполняет слияние, обновляя существующий словарь:
a = {1: 'a', 2: 'b', 3: 'c'}
b = {4: 'd', 5: 'e'}
a |= b
print(a)
Ожидание того стоит
В будущем Python ждет много других полезных изменений. Будет интересно наблюдать, как язык развивается с новым циклом обновлений и синтаксическим анализатором.
Переходите по ссылке для установки!
Читайте также:
- Python: как заменить циклы For на Map, Filter и Reduce
- 7 советов по улучшению анализа данных в Python
- Python: как заменить циклы For на Map, Filter и Reduce
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи James Briggs: Python 3.9