NEW VERSION ! PYTHON 3.11 , что изменилось и что добавили ?

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.10 and early

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

Python 3.11 *new version

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


ошибка , если наш интерпритатор ниже версии 3.11



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




С любовью от E7 ;)

Report Page