Выпущена версия Python 3.12: Изучение захватывающих новых возможностей и исправлений

Python 3.12 наконец-то здесь!

Python 3.12 (beta 1), последний крупный выпуск популярного языка программирования, был выпущен 22 мая 2023 года. Выпуск включает в себя несколько новых функций и улучшений, а также исправления ошибок. Разработчикам рекомендуется опробовать эту последнюю версию на непроизводственном коде, чтобы убедиться, что она работает с вашими программами, и получить представление о том, выиграет ли ваш код от новых функций и улучшений производительности в этой последней версии.

Выпущена версия Python 3.12: Изучение захватывающих новых возможностей и исправлений

Введение

Python – один из самых популярных языков программирования, используемых сегодня. Это универсальный язык высокого уровня, который используется для веб-разработки, анализа данных, искусственного интеллекта и многого другого. С каждой новой версией Python продолжает совершенствоваться и развиваться, предлагая разработчикам новые и интересные возможности.

Python 3.12 не является исключением. Этот выпуск включает в себя несколько новых функций и улучшений, которые, несомненно, облегчат жизнь разработчиков. От структурного сопоставления шаблонов до улучшенных сообщений об ошибках и новых модулей – в этом выпуске есть много интересного.

В этом посте мы подробно рассмотрим самые интересные новые возможности Python 3.12 и то, как их можно использовать для улучшения вашего кода.

Структурное сопоставление шаблонов

Одной из самых интересных новых возможностей в Python 3.12 является структурное сопоставление шаблонов. Эта функция разрабатывалась в течение нескольких лет и наконец-то появилась в языке.

В двух словах, структурное сопоставление шаблонов позволяет разработчикам сопоставлять сложные структуры данных с шаблонами, подобно тому, как регулярные выражения сопоставляют строки. Эта функция может быть использована для упрощения кода и повышения его читабельности.

Вот пример того, как работает структурное сопоставление шаблонов:

def calculate(x, y, operator):
    match operator:
        case "+":
            return x + y
        case "-":
            return x - y
        case "*":
            return x * y
        case "/":
            return x / y
        case _:
            raise ValueError(f"Invalid operator: {operator}")

В этом примере оператор match используется для сопоставления переменной оператора с различными шаблонами. Если оператор соответствует одному из случаев, выполняется соответствующее выражение. В противном случае возникает ошибка ValueError.

Вот еще один пример:

# Example: Structural pattern matching
data = {'name': 'John', 'age': 25}

# Python 3.12
match data:
    case {'name': name, 'age': age}:
        print(f"Name: {name}, Age: {age}")
    case _:
        print("Invalid data structure")

# Python 3.11 and earlier
if isinstance(data, dict) and 'name' in data and 'age' in data:
    name = data['name']
    age = data['age']
    print(f"Name: {name}, Age: {age}")
else:
    print("Invalid data structure")

Эту функцию можно использовать для упрощения кода, включающего сложные структуры данных. Это может сделать ваш код более читабельным и легким в сопровождении, что в конечном итоге сэкономит ваше время и усилия.

Улучшенные сообщения об ошибках/работа с ними

Python 3.12 также поставляется с улучшенными сообщениями об ошибках. Это улучшение сделает отладку проще и эффективнее.

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

Вот пример улучшенных сообщений об ошибках в действии: # Exception context

try:
    # Code that may raise an exception
    pass
except Exception as e:
    # Python 3.12
    print(f"Exception occurred: {e}")
    print(f"Exception context: {e.__context__}")

    # Python 3.11 and earlier
    print(f"Exception occurred: {e}")

В приведенном выше примере Python 3.12 вводит атрибут context, позволяющий получить доступ к подробной информации об исключениях. Используя эту возможность, вы можете получить ценные сведения о причинах, лежащих в основе исключений, что позволит вам быстро выявлять и точно решать проблемы.

Вот еще один пример:

>>> import math
>>> math.sqrt(-1)
Traceback (most recent call last):
...
ValueError: math domain error: sqrt() argument cannot be negative
Did you mean: math.sqrt(abs(-1))?

В этом случае сообщение об ошибке подсказывает, что программист может исправить ошибку, вызвав функцию abs() для отрицательного числа, прежде чем передать его в функцию sqrt().

Это усовершенствование сделает отладку более простой и эффективной. Это поможет вам сэкономить время и силы, когда вы пытаетесь найти ошибку в своем коде.

Поддержка профайлера Linux perf

Python 3.12 теперь поддерживает Linux perf profiler, который можно использовать для профилирования кода Python. Это может помочь вам определить узкие места в производительности вашего кода.

import perf

profiler = perf.Profiler()
profiler.start()

# Do some work here

profiler.stop()

report = profiler.report()

print(report)

В результате будет распечатан отчет, показывающий производительность запущенного кода. Отчет включает информацию о времени, проведенном в каждой функции, а также о количестве вызовов каждой функции.

Более быстрая отладка/контроль профиля

Python 3.12 был оптимизирован для более быстрой отладки и мониторинга профиля. Это поможет вам быстрее отлаживать код и легче выявлять узкие места в производительности.

import timeit

def my_function():
    # Do some work here
timeit.timeit("my_function()", number=10000)

Это выведет время, затраченное на выполнение функции my_function() 10 000 раз. В Python 3.12 это будет быстрее, чем в предыдущих версиях Python.

Износ и удаление устаревших функций:

По мере развития Python устаревшие функции, которые больше не считаются лучшими практиками, устаревают или удаляются. Python 3.12 продолжает эту тенденцию, устаревая некоторые функции, побуждая разработчиков использовать более современные и эффективные альтернативы. Это гарантирует, что экосистема Python остается актуальной и побуждает разработчиков следовать рекомендуемым практикам.

Меньшие размеры объектов

В ранних версиях Python базовый размер объекта составлял 208 байт. За последние несколько версий Python объекты были многократно рефакторингованы, чтобы сделать их меньше, что не только позволяет большему количеству объектов жить в памяти, но и помогает локальности кэша. Начиная с Python 3.12, базовый размер объекта теперь составляет 96 байт – меньше половины того, что было раньше.

Сборка мусора

сборки мусора (GC) Python. Раньше GC запускался всякий раз, когда выделялся объект. Однако в последней версии GC теперь работает исключительно во время механизма “eval breaker” в цикле байткода Python. Это означает, что он запускается между выполнением одного байткода и другого. Кроме того, GC запускается всякий раз, когда вызывается механизм проверки обработчиков сигналов CPython. Эти усовершенствования позволяют периодически запускать GC во время длительных обращений к расширениям C за пределами среды выполнения, обеспечивая оптимальное управление памятью в течение всего времени выполнения.

Заключение

Python 3.12 – это крупный релиз, который привнес в язык несколько новых интересных возможностей. От структурного сопоставления шаблонов до улучшенных сообщений об ошибках и новых модулей – в этом выпуске есть много интересного.

Независимо от того, являетесь ли вы опытным разработчиком Python или только начинаете, обновление до Python 3.12 стоит рассмотреть. Благодаря новым возможностям и улучшениям Python остается одним из самых популярных и универсальных языков программирования, используемых сегодня.

Счастливого программирования!

+1
0
+1
4
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *