NEW VERSION ! PYTHON 3.11 , что изменилось и что добавили ?
moderator E7
Всем привет ! Недавно вышла всеми ожидамая версия Python 3.11 !
В этой же статье я хотел рассказать о нововведениях которые нас ожидают. Предлагаю сразу перейти к ним !
1. Быстродействие интерпритатора
Первое , с чего я хотел бы начать , это обновлённый интерпритатор питона - Cython. Благодаря последнему апдейту , общее быстродействие кода увеличилось на 25% , а в некоторых случаях может и на целых 60% ! Если простыми словами , перейдя с прошлой версии интерпритатора Python на Python 3.11 , никак не меняя свой коды , вы увеличите скорость его выполнения.
Пару слов считаю стоит уделить Cython. Обновлённый интерпретатор способен благадоря новым алгоритмам разбивать однотипные вычисления , сокращая тем самым байт-код , благодаря чему обеспечивается быстродействие исполнения скрипта.
2. "Красивый" Traceback
Рассмотрим это нововведение на примере:
Traceback (most recent call last):
File "test.py", line 2, in <module>
x['a']['b']['c']['d'] = 1
TypeError: 'NoneType' object is not subscriptable
Так выглядило описание ошибки раньше . Если честно , вообще не понятно где именно ошибка в этой строке кода. Давайте рассмотрим эту же ошибку , но только на версии 3.11
Traceback (most recent call last):
File "test.py", line 2, in <module>
x['a']['b']['c']['d'] = 1
~~~~~~~~~~~^^^^^
TypeError: 'NoneType' object is not subscriptable
Мы видем как стрелочками показано место ошибки и это очень круто !
Я уточню , что такой синтаксис будет связан не только с ошибками типа NoneType
3. Защита данных
С релизом новой версии , очень преобразился в плане скорости и удобства , а что на счёт безопастности ?
Но тут не всё так хорошо , в отличие от выше описанных пунктах. Разработчики добавили один интересный hints-тип , называется LiteralString.
LiteralString может включать только строковые литералы, совместимые с типом LiteralString. Тип можно использовать для ограничения передачи функциям строковых аргументов, где произвольная подстановка частей строк может привести к уязвимостям;
4. Асинхронные таски
Давайте представим что нам надо запустить несколько задач асинхронно , как бы это выглядило раньше:

Это не самый прямолиннейный способ запускать задачи в принципе, поэтому в python 3.11 добавили атрибут TaskGroup. Теперь код будет выглядить красивым и более читаемым.

К слову , вот что будет если запустить код выше на версии интерпритатора 3.10 и раньше:

Это было не всё , а только то что я посчитал самым важным. Остальное советую прочитать в документации Python , в частности про TOML и группы исключений.
С любовью от E7 ;)