После года разработки опубликована новая версия языка программирования Python 3.11, новая ветка будет поддерживаться полтора года, после чего еще три с половиной года будут формироваться патчи с уязвимостями.
В то же время началось альфа-тестирование ветки Python 3.12. (по новому графику разработки работа над новой веткой начинается за пять месяцев до релиза предыдущей ветки и доходит до альфа-тестирования к моменту выхода следующей версии).
Ветка Python 3.12 будет находиться в альфа-версии в течение семи месяцев, в течение которых будут добавлены новые функции и исправлены ошибки. После этого в течение трех месяцев будет проходить бета-тестирование, в течение которого будет запрещено добавление новых функций и все внимание будет уделено исправлению ошибок. Последние два месяца перед запуском ветка будет находиться в стадии кандидата на запуск, после чего произойдет окончательная стабилизация.
Основные новые функции Python 3.11
В этой новой версии Проделана большая работа по оптимизации производительности., так как новая ветка включает в себя соответствующие изменения с ускорением и встроенным развертыванием вызовов функций, использование быстрых интерпретаторов типовых операций, а также оптимизации, подготовленные проектами Cinder и HotPy. В зависимости от типа нагрузки скорость выполнения кода увеличивается от 10% до 60%. В среднем производительность при прохождении набора тестов pyperformance увеличилась на 25%.
Механизм кэширования был переработан. байт-кода, что сократило время запуска интерпретатора на 10-15%. Объекты с кодом и байт-кодом теперь распределяются интерпретатором статически, что позволило исключить этапы расшифровки байт-кода, извлеченного из кеша, и преобразования объектов с кодом для размещения их в куче памяти.
Добавлено поддержка групп исключений, что дает программе возможность вызывать и обрабатывать несколько разных исключений одновременно. Предлагаются новые типы исключений ExceptionGroup и BaseExceptionGroup для группировки нескольких исключений вместе, а выражение «кроме*» добавляется для отделения исключений от группы.
Добавлен специальный тип LiteralString это только может включать литеральные строки, совместимые с типом LiteralString (то есть голые строки и строки типа LiteralString, но не произвольные или смешанные строки типа str). Тип LiteralString можно использовать для ограничения передачи строковых аргументов функциям, произвольной подстановки частей строк там, где это может привести к уязвимостям, например, при генерации строк для SQL-запросов или команд оболочки.
Кроме того, также предусмотрена возможность пометить отдельные элементы словарей (TypedDict) с флагами Required и Not Required для определения обязательных и необязательных полей (по умолчанию все объявленные поля являются обязательными, если для параметра total не установлено значение Фальшивый).
Добавлен класс @dataclass_transform, декоратор методов и функций., когда он указан, средство проверки статического типа обрабатывает объект так, как если бы он использовал декоратор @dataclasses.dataclass.
Из других изменений, которые выделяются в этой новой версии:
- Добавлена возможность использовать атомарную группировку ((?>…)) и ревнивые (притяжательные) квантификаторы (*+, ++, ?+, {m,n}+) в регулярных выражениях.
- Добавлен тип TypeVarTuple, который позволяет использовать дженерики переменных, в отличие от TypeVar, который охватывает не один тип, а произвольное количество типов.
- Стандартная библиотека включает модуль tomllib с функциями для разбора формата TOML.
- В класс BaseException был добавлен метод add_note(), который позволяет прикреплять текстовую заметку к исключению, например, для добавления контекстной информации, которая не была доступна во время создания исключения.
- Для представления текущего закрытого класса был добавлен специальный тип Self. Self можно использовать для аннотирования методов, возвращающих экземпляр вашего класса, более простым способом, чем использование TypeVar.
- Добавлен параметр командной строки «-P» и переменная среды PYTHONSAFEPATH для отключения автоматического подключения потенциально небезопасных путей к файлам в sys.path.
- Утилита py.exe для платформы Windows была значительно улучшена и теперь поддерживает синтаксис «-V:». / » в дополнение к «- . ».
- Многие макросы C API были преобразованы в обычные или статические встроенные функции.
- Модули uu, cgi, pipe, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev и sunau объявлены устаревшими и будут удалены из Python. выпуск 3.13.
- Удалены функции PyUnicode_Encode*.
- Класс TaskGroup был добавлен в модуль asyncio с реализацией асинхронного менеджера контекста, который ожидает завершения группы задач.
- Добавление задач в группу осуществляется с помощью метода create_task().
В конце концов если вам интересно узнать об этом больше, вы можете проверить подробности в по следующей ссылке.