Что Python 3.9 нам готовит?

Python

19 мая состоялся релиз Python 3.9.0 beta1. Нововведения, которые включены в данную бету, с высокой вероятностью попадут в итоговый релиз. Небольшие изменения в функционале возможны до выпуска release candidate, который запланирован на 10.08.2020. Но появление новых фич уже не планируется.

Рассмотрим новые возможности и изменения, которые появились в данной версии, и с которыми, наиболее вероятно, столкнется рядовой пользователь Python.

РЕКОМЕНДУЕМ:
Система распознавания лиц на Python

Вводится новый оператор объединения словарей

В предыдущих версиях существует несколько способов объединения словарей. Но каждый из них имеет определенные недостатки или ограничения:

  • Метод dict.update.
    Данный метод модифицирует словарь, к которому применяется. Например, выражение dict_1.update(dict_2) изменяет словарь dict_1. Это не всегда удобно на практике.
  • Использование распаковки вида {**d1, **d2}В PEP 584 привели цитату Гвидо, который сказал о том, что «даже если пользователи Python знакомы с использованием конструкции распаковки **d в другом контексте, он сомневается, что они смогут сходу предложить такой способ объединения словарей». Гвидо признается, что и сам забыл про этот способ.К тому же, конструкция {**d1, **d2} игнорирует mapping-типы. Поэтому не все подклассы dict будут совместимы с ней (например, collections.defaultdict не может быть использован).
  • Использование collections.ChainMapДанный класс не очень распространен, и многие считают его неочевидным. Если в объединяемых словарях есть дубликаты, то все они будут храниться в ChainMap. А при изменении значения по ключу, будет изменяться только первый найденный элемент. Кроме того, как и в случае с распаковкой, есть проблемы совместимости с подклассами dict.
  • Использование конструкции dict(dict_1, **dict_2)Также не очень распространенный метод. К тому же, в этом случае требуется чтобы dict_2 был только со строковыми ключами.

В Python 3.9 добавляется оператор объединения словарей |, работу которого легче всего продемонстрировать на примере:

То есть операция объединения не является коммутативной. Если в объединяемых словарях имеются одинаковые ключи, значение берется из последнего операнда. Также поддерживается расширенный оператор присваивания |=.

Новые методы строк для удаления префиксов и суффиксов

Стандартный тип str получил пару новых методов для удаления префикса и суффикса:

Упрощается аннотирование типов (type hinting)

Авторы говорят о том, что исторически сформировалось, по сути, две дублирующих иерархии типов. При аннотировании была необходимость импорта типов из модуля typing. Такое указание типов становится устаревшим:

Начиная с версии 3.7 можно было использовать конструкцию from __future__ для отложенной обработки аннотаций, что позволяет использовать типы стандартных коллекций:

И, с приходом версии 3.9, можно будет полностью перейти на аннотирование через стандартные коллекции. Как указано в PEP 585, поддержка устаревшей функциональности будет удалена из модуля typing через 5 лет после выпуска Python 3.9.

Полный список типов, которые можно будет использовать

РЕКОМЕНДУЕМ:
Что Python 3.9 нам готовит?

Гибкие аннотации функций и переменных

В модуль typing добавляется тип Annotated, с помощью которого можно добавлять существующим типам контекстно-зависимые метаданные. Использование конструкции Annotated[T, x] означает, что тип T аннотируется метаданными x. Например:

Подробное описание данной, достаточно специфичной темы приводится в PEP 593 Flexible function and variable annotations.

А так же…

Кроме описанных выше изменений, в версии 3.9 исправлены ряд багов и упоминается об ускорении работы встроенных типов range, tuple, set, frozenset, list, dict.

В рамках PEP 617 анонсирован новый PEG-парсер грамматики для CPython. Он приходит на смену LL(1)-парсера и расширяет возможности языка, поддерживая более сложные и гибкие грамматические конструкции выражений.

Также в PEP 602 объявлено, что начиная с версии 3.9, выпуск новых версий будет осуществляться раз в год, а цикл разработки каждой новой версии (3.10, 3.11 и т.д.) будет занимать 17 месяцев. Стабильность — залог успеха!

image

Понравилась статья? Поделиться с друзьями:
Добавить комментарий