В новой версии разработчики языка добавили параметризованные диспетчеры контекста. Они позволяют форматировать длинные коллекции диспетчеров контекста в несколько строк. Ранее это можно было реализовать через 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:
«Оператор объединения типов — отвал башки».

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

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