Найти в Дзене
Язык программирования Python выпускает новые версии ежегодно: бета-версия с блокировкой функций — в первой половине года, а окончательный — ближе к концу года. Python 3.11 только что был выпущен, и разработчикам рекомендуется опробовать эту последнюю версию на непроизводственном коде, чтобы убедиться, что она работает с вашими программами, и чтобы получить представление о том, выиграет ли ваш код от улучшений производительности. Вот краткое изложение наиболее значимых новых функций Python 3.11 и того, что они значат для разработчиков Python. Улучшения скорости В Python 3.11 реализовано множество отдельных улучшений производительности, но самым большим нововведением является специализированный адаптивный интерпретатор. Поскольку тип объекта меняется редко, теперь интерпретатор пытается проанализировать работающий код и заменить общие байт-коды специфическими для типа. Например, бинарные операции (сложение, вычитание и т. д.) можно заменить специализированными версиями для целых чисел, чисел с плавающей запятой и строк. Вызовы функций Python также требуют меньше накладных расходов в Python 3.11. Фреймы стека для вызовов функций теперь используют меньше памяти и спроектированы более эффективно. Кроме того, хотя рекурсивные вызовы не оптимизированы по хвосту (что, вероятно, невозможно в Python, в любом случае), они более эффективны, чем в предыдущих версиях. Сам интерпретатор Python также запускается быстрее, а основные модули, необходимые для среды выполнения Python, хранятся и загружаются более эффективно. Согласно официальному набору тестов Python, Python 3.11 работает примерно в 1,25 раза быстрее, чем Python 3.10. Обратите внимание, что это ускорение является совокупным показателем. Некоторые вещи работают намного быстрее, но многие другие работают лишь немного быстрее или примерно так же. Тем не менее, лучшая часть этих улучшений заключается в том, что они предоставляются бесплатно. Вам не нужно вносить какие-либо изменения в код программ на Python, чтобы воспользоваться преимуществами ускорения Python 3.11. Расширенная информация об ошибках Еще одна полезная функция в Python 3.11 — более подробные сообщения об ошибках. В Python 3.10 уже были улучшены отчеты об ошибках благодаря новому синтаксическому анализатору, используемому в интерпретаторе. Теперь Python 3.11 расширяет это, предоставляя подробную информацию о том, какая конкретная часть данного выражения вызвала ошибку. Рассмотрим следующий код, который выдает ошибку: х = [1,2,3] z = х [1] [0] В Python 3.10 мы получили бы следующее сообщение об ошибке, которое не очень полезно:  File "C:\Python311\code.py", line 2, in <module>   z = x[1][0] TypeError: 'int' object is not subscriptable Вместо того, чтобы оставлять нас в недоумении, какой тип int не поддерживает сценарий, трассировка ошибки в Python 3.11 указывает именно на ту часть строки, которая генерирует ошибку: File "C:\Python311\code.py", line 2, in <module> z = x[1][0] ~~~~^^^ TypeError: 'int' object is not subscriptable Теперь нет никакой двусмысленности в том, в чем заключается проблема. Улучшения исключений Исключения, механизм обработки ошибок Python, получили много новых функций в Python 3.11: Несколько исключений могут быть вызваны и обработаны одновременно с помощью нового синтаксиса exclude* и нового типа исключения ExceptionGroup. Это позволяет элегантно обрабатывать проблемы, когда несколько ошибок могут возникать вместе, например, при работе с асинхронными или параллельными методами или при работе с несколькими сбоями при повторной попытке операции. Исключения с нулевой стоимостью: Исключения теперь не имеют стоимости для программы, если только они не вызваны на самом деле. Это означает, что путь по умолчанию для блока try/except быстрее и использует меньше памяти. Время, необходимое для перехвата исключения, сократилось примерно на 10%. Исключения могут быть дополнены контекстными примечаниями, отдельными от текста самого исключения.
2 года назад