Код
#новости

Вышел Python 3.10.1 — добавились полезные фичи

Новый синтаксис, улучшенный интерпретатор, оператор объединения типов и обновлённая стандартная библиотека.

В новой версии разработчики языка добавили параметризованные диспетчеры контекста. Они позволяют форматировать длинные коллекции диспетчеров контекста в несколько строк. Ранее это можно было реализовать через import выражения. Теперь доступен следующий синтаксис:

with (CtxManager() as example):
    ...
with (
    CtxManager1(),
    CtxManager2()
):
    ...
with (CtxManager1() as example,
      CtxManager2()):
    ...
with (CtxManager1(),
      CtxManager2() as example):
    ...
with (
    CtxManager1() as example1,
    CtxManager2() as example2
):
    ...

Сообщения об ошибках стали умнее. Улучшили SyntaxErrors, IndentationErrors, AttributeErrors и NameErrors. Они выводят более точное описание проблемы. Например, в прошлых версиях Python SyntaxError для следующего кода возникло бы такое сообщение об ошибке:

expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
            38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6,
some_other_code = foo()
File "example.py", line 3
    some_other_code = foo()
                    ^
SyntaxError: invalid syntax

А в версии 3.10 интерпретатор выдаёт такую ошибку:

File "example.py", line 1
    expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
               ^
SyntaxError: '{' was never closed

Дебагер стал более точным и надёжным. Стандарт PEP 626 добавил в Python номера строк для отладки, профилирования и мониторящих инструментов.

PEP 634 привнёс структурное соответствие шаблонов. Это позволяет вытаскивать информацию из сложных типов данных и выполнять действия для определённых форматов. Синтаксис состоит из match/case-выражения:

match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:
        <action_wildcard>

PEP 604 добавил новый оператор — объединение типов. Он используется для выражений «либо тип X, либо Y» и заменяет typing.Union. Например, ниже представлены старая и новая версии:

def square(number: Union[int, float]) -> Union[int, float]:
    return number ** 2
def square(number: int | float) -> int | float:
    return number ** 2

PEP 613 ввёл TypeAlias. Он позволяет объявлять псевдонимы для типов более явно:

StrCache: TypeAlias = 'Cache[str]'  # a type alias
LOG_PREFIX = 'LOG[DEBUG]'  # a module constant

Подробное описание всех изменений можно прочитать на официальном сайте Python.

Вот как на это отреагировали пользователи Reddit:

«Оператор объединения типов — отвал башки».

Скриншот: Reddit

«Я думал, что выйдет Python 4. Теперь, получается, нужно ждать ещё несколько лет».

Скриншот: Reddit

«А Я ВСЁ ЕЩЁ УЧУ PYTHON 3.9!!!»

Скриншот: Reddit


Жизнь можно сделать лучше!
Освойте востребованную профессию, зарабатывайте больше и получайте от работы удовольствие.
Каталог возможностей
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована