Добавить в корзинуПозвонить
Найти в Дзене
MTK

Что Нового В Python 3.10

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

Контекстные менеджеры в скобках

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

Лучшие сообщения об ошибках в парсере

При разборе кода, содержащего незамкнутые скобки или скобки, интерпретатор теперь включает местоположение незамкнутой скобки скобок вместо отображения SyntaxError: unexpected EOF при разборе или указании на какое-то неправильное местоположение.

PEP 626: Точные номера строк для отладки и других инструментов

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

f_lineno Атрибут объектов фрейма всегда будет содержать ожидаемый номер строки.

co_lnotab Атрибут объектов кода устарел и будет удален в 3.12. Код, который нужно преобразовать из смещения в номер строки, должен использовать новый co_lines() метод.

PEP 634: Структурное сопоставление паттернов

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

Декларативный подход

Читатели могут быть осведомлены о сопоставлении шаблонов на простом примере сопоставления субъекта (объекта данных) с литералом (шаблоном) с помощью оператора switch, найденного в C, Java или JavaScript (и многих других языках). Часто оператор switch используется для сравнения объекта/выражения с операторами case, содержащими литералы.

Более мощные примеры сопоставления с образцом можно найти в таких языках, как Scala и Elixir. При структурном сопоставлении шаблонов подход является “декларативным” и явно определяет условия (шаблоны) для сопоставления данных.

Хотя “императивная” серия инструкций, использующих вложенные операторы “если”, может быть использована для достижения чего-то похожего на структурное сопоставление шаблонов, это менее ясно, чем “декларативный” подход. Вместо этого “декларативный” подход устанавливает условия для соответствия и более читаем через его явные шаблоны. В то время как структурное сопоставление шаблонов может использоваться в самой простой форме, сравнивая переменную с литералом в операторе case, его истинное значение для Python заключается в его обработке типа и формы субъекта.

Простой шаблон: совпадение с литералом

Давайте рассмотрим этот пример как сопоставление шаблонов в его простейшей форме: значение, предмет, сопоставляемый с несколькими литералами, шаблоны. В приведенном ниже примере status является предметом оператора match. Шаблоны - это каждый из операторов case, где литералы представляют коды состояния запроса.

Другие Ключевые Особенности

Несколько других ключевых особенностей:

  • Подобно распаковке заданий, шаблоны кортежей и списков имеют точно такое же значение и фактически соответствуют произвольным последовательностям. Технически субъект должен быть экземпляром collections.abc.Sequence . Поэтому важным исключением является то, что шаблоны не совпадают с итераторами. Кроме того, чтобы предотвратить распространенную ошибку, шаблоны последовательностей не совпадают со строками.
  • Шаблоны последовательностей поддерживают подстановочные знаки [x, y, *rest] и (x, y, *rest) работают аналогично подстановочным знакам при распаковке назначений. Имя после * также может быть _ , поэтому (x, y, *_) соответствует последовательности по крайней мере из двух элементов, не связывая остальные элементы.
  • Mapping patterns: {"bandwidth": b, "latency": l} захватывает значения "bandwidth" and "latency" из dict. В отличие от шаблонов последовательностей, дополнительные ключи игнорируются. Также поддерживается подстановочный **rest знак. (Но **_ это было бы излишним, поэтому не допускается.)
  • Подшаблоны могут быть захвачены с помощью as ключевого слова.
  • Большинство литералов сравниваются по равенству. Однако синглеты True False и None сравниваются по тождеству.
  • Именованные константы могут использоваться в шаблонах. Эти именованные константы должны быть пунктирными именами, чтобы предотвратить интерпретацию константы как переменной захвата.

Улучшенные Модули

argparse

Вводящая в заблуждение фраза “необязательные аргументы” была заменена на “параметры” в справке argparse. Некоторые тесты могут потребовать адаптации, если они полагаются на точное совпадение выходных данных. (Вклад Раймонда Хеттингера в bpo-9694 .)

массив

index() Метод array.array now имеет необязательные параметры start и stop . (Вклад Андерса Лоренцена и Закери Шпица в bpo-31956 .)

base64

Добавьте base64.b32hexencode() и base64.b32hexdecode() поддержите кодировку Base32 с расширенным шестнадцатеричным алфавитом.

И др.