Python 3.11 еще не вышел, но вы можете попробовать RC-версию. Спойлер: это потрясающе

Ожидается, что Python 3.11 выйдет в эфир в октябре 2022 года. До этого осталось пять месяцев, так что за ажиотаж? Как обычно, мы можем протестировать версию RC и посмотреть, как она сравнивается с Python 3.10.

Это именно то, что я сделал. Я настроил два контейнера Docker, один для Python 3.10, а другой для Python 3.11, и прикрепил их к отдельным окнам Visual Studio Code. Мы запустим один и тот же код в обоих и посмотрим, что принесет новый релиз.

TL;DR — новых функций много, но я решил написать о трех. Это лучшие места для ошибок, заметки об исключениях и встроенный синтаксический анализатор TOML. Это значительное улучшение по сравнению со старыми версиями Python. Обратитесь к официальному журналу изменений для получения полного списка новых функций.

Знаете ли вы, что Python 3.11 будет на 60 % быстрее, чем Python 3.10? Вот подробный тест.

Не хочется читать? Лучше посмотрите мое видео:

Функция Python 3.11 № 1 — расширенные местоположения ошибок

При печати трассировки интерпретатор Python теперь будет указывать точное выражение, вызвавшее ошибку, а не только строку. Например, вот фрагмент кода, который выдаст ошибку, поскольку элемент списка по данному индексу не существует:

if __name__ == "__main__":
    l = [1, 2, 3]
    print(l[3])

В Python 3.10 вы получите следующий вывод:

С другой стороны, Python 3.11 напечатает следующее:

Python 3.11 подчеркивает именно ту часть кода, которая вызвала ошибку, и это аккуратно. Аналогичная история, скажем, со словарями Python. Следующий фрагмент кода вызовет ошибку, потому что в словаре нет этого ключа:

if __name__ == "__main__":
    d = {"key1": "value1", "key2": "value2"}
    print(d["key3"])

Вот что выдает Python 3.10:

А вот вывод для Python 3.11:

Еще раз, Python 3.11 подчеркивает именно ту часть кода, которая вызвала ошибку.

Функция Python 3.11 № 2 — примечания об исключениях

Класс Python Exception будет иметь атрибут __note__ в Python 3.11. По умолчанию это None, но вы можете переопределить его любой строкой. Конечно, это не самая новаторская функция, но заметки здесь и там могут пригодиться, если у вас есть десятки пользовательских классов исключений.

Вот код, который мы будем запускать в обоих контейнерах:

class CustomException(Exception):
    __note__ = "Note about my custom exception"

if __name__ == "__main__":
    raise CustomException()

А вот вывод для Python 3.10:

Как и следовало ожидать, класс Exception Python 3.10 не знает о новом атрибуте. Совсем другая история с Python 3.11:

Еще раз, Python 3.11 подчеркивает точную строку, вызвавшую ошибку — в данном случае очевидную, — но также печатает наше примечание в конце.

Функция Python 3.11 №3 — встроенный синтаксический анализатор TOML

TOML или Очевидный минимальный язык Тома — это минимальный формат файла конфигурации. До Python 3.11 не было встроенной библиотеки для работы с файлами конфигурации TOML. Теперь это меняется.

Ниже приведен фрагмент кода, который мы запустим в обоих контейнерах:

import tomllib 
DOC = """
[main]
python_version = 3.11
[api]
endpoint_users = "/api/v2/users"
endpoint_posts = "/api/v2/posts"
"""
if __name__ == "__main__":
    doc_parsed = tomllib.loads(DOC)
    print(doc_parsed)

В Python 3.10 нет библиотеки tomllib, поэтому исключение возникает мгновенно:

Python 3.11 поддерживает его, так как не имеет проблем с разбором строки TOML:

Установка специальной библиотеки для разбора файлов TOML, конечно, занимает несколько секунд, но приятно видеть, что это будет встроенная функция из нового выпуска.

Обзор новых возможностей Python 3.11

Мы рассмотрели три функции, которые появятся в Python 3.11. Конечно, есть и другие, такие как тип self, группы исключений, асинхронные включения и многое другое, но вы можете обратиться к официальному журналу изменений, если вам интересно.

Вероятно, самым большим улучшением новой версии Python является увеличение скорости. В среднем Python 3.11 будет на 15% быстрее, чем Python 3.10, а разница достигает 64%. Я сравнил их в своей подробной эталонной статье, поэтому обязательно ознакомьтесь с ней.

Какая ваша любимая функция Python 3.11? Пожалуйста, дайте мне знать в разделе комментариев ниже.

Понравилась статья? Станьте участником Medium, чтобы продолжать обучение без ограничений. Я получу часть вашего членского взноса, если вы перейдете по следующей ссылке, без каких-либо дополнительных затрат с вашей стороны.



Рекомендуемые чтения

Оставайся на связи

Первоначально опубликовано на https://betterdatascience.com 9 мая 2022 г.