Добавить в корзинуПозвонить
Найти в Дзене

Python 3.10 Что Нового?

Начало октября 2021 года, а именно 4 число, ознаменовано выходом новой версии языка Python – 3.10. Сентябрь догорел, официальный релиз выкатился. В этой статье мы рассмотрим основные нововведения и ответим на вопрос – есть ли смысл обновляться прямо сейчас?  Поехали! Начнём с простенького. Оператор объединения типов,  а как следствие улучшение при проверке типов. Разработчики перегрузили оператор union и теперь  его можно использовать при аннотации типов. Это позволит сделать синтаксис чище и отказаться  от громоздкого перечисления типов в Union, если функция, например, возвращает либо значение типа  int, либо float. Кроме аннотаций, объединять типы можно также внутри функций для проверки типов,  таких как isinstance() и issubclass(): Явные псевдонимы для типов данных.  Тут появились небольшие изменения синтаксиса, разработчики несколько переработали возможность  задавать явные псевдонимы для сколь угодно сложных и не очень типов данных. Если раньше мы могли как  бы просто создать пере
Оглавление

Начало октября 2021 года, а именно 4 число, ознаменовано выходом новой версии языка Python

– 3.10. Сентябрь догорел, официальный релиз выкатился. В этой статье мы рассмотрим основные нововведения и ответим на вопрос – есть ли смысл обновляться прямо сейчас? 

Поехали!

Начнём с простенького. Оператор объединения типов,  а как следствие улучшение при проверке типов. Разработчики перегрузили оператор union и теперь  его можно использовать при аннотации типов. Это позволит сделать синтаксис чище и отказаться  от громоздкого перечисления типов в Union, если функция, например, возвращает либо значение типа  int, либо float. Кроме аннотаций, объединять типы можно также внутри функций для проверки типов,  таких как isinstance() и issubclass():

Явные псевдонимы для типов данных. 

-2

Тут появились небольшие изменения синтаксиса, разработчики несколько переработали возможность  задавать явные псевдонимы для сколь угодно сложных и не очень типов данных. Если раньше мы могли как  бы просто создать переменную и присвоить ей в качестве значения какой-то тип данных, то теперь  мы явно указываем, что мы хотим задать именно псевдоним типа, а не просто какую-то переменную.  Очень приятная мелочь, которая повышает понятность и читаемость кода. К слову, новый  синтаксис обратно совместим с Python 3.9.

Parameter Specification Variables

Из этой же оперы, в модуль typing добавили так называемый Parameter Specification Variables. Призвано это добавить возможность пересылки типов параметров одного вызываемого объекта другому вызываемому объекту,  что как следствие также должно облегчить аннотирование, например, декораторов функций.  Фича довольно специфичная и пригодится не такому уж большом числу разработчиков,  поэтому с ней предлагаю самостоятельно ознакомиться на официальном сайте.

 Более понятное указание ошибок.

-3

Теперь, когда вы допустили какую-то синтаксическую ошибку Python будет более конкретно сообщать, что пошло не так и в каком именно месте. Раньше, например,  забыл ты закрыть скобку и сразу invalid. Python 3.10 же знает об этом заранее и сразу указывает  конкретную строку и конкретную ошибку. Очень сочное нововведение, оставившее кучу гадалок  без работы. Определенно лайк и едем дальше.

Добавлена дополнительная проверка длины списков внутри функции zip().

-4

Теперь можно добавить необязательный логический параметр strict для функции zip(). Если этот параметр указан как True, то возникнет ошибка ValueError, если один из аргументов функции zip() закончится раньше других. Это снижает вероятность неожиданно  выстрелить себе в ногу при такой ситуации.

Многострочный синтаксис у менеджеров контекста. 

Обнова позволит в скобках указывать сразу несколько контекстных менеджеров. Это удобно, если  вам нужно создать в одном операторе with несколько менеджеров. Неплохой такой синтаксический сахарок,  на котором нет смысла долго задерживаться.

Pattern matching или Сопоставление структурных  шаблонов.

Как известно в языке Python отсутствует оператор switch. Поэтому разрабы решили закрыть давнишний гештальт, да не просто добавив switch, а добавив его более продвинутую, подсмотренную у функциональных языков, версию, называемую pattern matching.

Базовый синтаксис выглядит следующим образом. Состоит он из ключевого слова match, за которым следует выражение, а его результат проверяется на соответствие шаблонам,  указанным в последовательных операторах case.

-5

Однако с помощью pattern matching мы можем иметь последовательности сопоставлений, использовать сложные шаблоны, сопоставлять как примитивные типы данных, так и экземпляры классов. Кроме того, мы прямо на месте можем проводить разного рода дополнительные проверки выражений. Это позволит творить вот такие мощные и интересные вещи.

-6

Это хедлайн фича данной версии языка и довольно качественный, полезный инструмент, который точно сыщет популярность у разработчиков.

Также здесь немного улучшили производительность, а  именно оптимизировали конструкторы str(), bytes() и bytearray(), ускорили работу аннотации типов и провели пару-тройку оптимизаций ядра языка.

В общем-то ничего прорывного, но упомянуть стоило.

А ещё: добавили обязательное наличие OpenSSL для сборки CPython; выкинули устаревшие модули, например, distutils; убрали Py_UNICODE API и ещё кучу незначительных мелочей, с которыми можно ознакомиться в официальном ченджлоге, на их сайте.

Версия 3.10 будет получать обновления по исправлению ошибок примерно каждые 2 месяца  в течение 18 месяцев. После этого ожидается, что обновления для системы безопасности будут выпущены  в течение 5 лет после выпуска 3.10 final, то есть примерно в октябре 2026 года.