Описание тега structural-pattern-matching
Этот тег предназначен для вопросов о функции сопоставления структурных шаблонов Python, представленной в версии 3.10.
1
ответ
Как использовать сопоставление шаблонов для запросов в стиле SQL со строками JSON или JSON
Начиная с данных в виде JSON или строкJSON , я хочу использовать сопоставление структурных шаблонов для выполнения запросов к ним. Например, после запуска json.load() я получаю dict со следующей структурой: publications = { 'location': 'central libr…
13 май '21 в 23:07
1
ответ
Предотвращение случайного захвата при сопоставлении структурных шаблонов
Этот пример обсуждается как вероятная "ошибка" при использовании сопоставления с образцом: NOT_FOUND = 400 retcode = 200 match retcode: case NOT_FOUND: print('not found') print(f'Current value of {NOT_FOUND=}') Это пример случайного захвата со струк…
13 май '21 в 23:44
2
ответа
Преобразование нескольких проверок isinstance в структурное сопоставление с образцом
Я хочу преобразовать этот существующий код для использования сопоставления с образцом: if isinstance(x, int): pass elif isinstance(x, str): x = int(x) elif isinstance(x, (float, Decimal)): x = round(x) else: raise TypeError('Unsupported type') Как в…
13 май '21 в 21:51
1
ответ
Как выразить логику набора текста hasattr() со структурным сопоставлением шаблонов?
У меня есть код, который проверяет именованные кортежи и классы данных , ища _fields атрибут: if hasattr(candidate, '_fields'): do_action() Как я могу выразить это с помощью сопоставления структурных шаблонов совпадений / регистра в Python 3.10?
13 май '21 в 19:50
2
ответа
Захват делает оставшиеся шаблоны недоступными
Почему этот код не работает: OKAY = 200 NOT_FOUND = 404 INTERNAL_SERVER_ERROR = 500 match status: case OKAY: print('It worked') case NOT_FOUND: print('Unknown') case INTERNAL_SERVER_ERROR: print('Out of service') case _: print('Unknown code') Он ген…
13 май '21 в 22:40
2
ответа
Структурный образец сопоставления Python - сопоставление набора / Frozenset
Я играл со структурным шаблоном соответствия в Python 3.10 и не могу понять, как заставить его соответствовать набору. Например, я пробовал: a = {1,2,3} match a: case set(1,2,3): print('matched') и я пробовал: a = {1,2,3} match a: case set([1,2,3]):…
03 июн '21 в 23:11
1
ответ
Point() принимает 0 позиционных подшаблонов (дано 2)
Я пытаюсь запустить пример из документации, но получаю сообщение об ошибке: Traceback (most recent call last): File "<stdin>", line 2, in <module> TypeError: Point() accepts 0 positional sub-patterns (2 given) Может кто-нибудь объяснить,…
19 окт '21 в 11:39
2
ответа
Использование структурного сопоставления с образцом для определения хешируемости
Как написать регистр, который соответствует хешируемым объектам, используя структурное сопоставление с образцом?
05 ноя '21 в 08:06
1
ответ
Как отличить кортеж от списка при сопоставлении структурных шаблонов Python?
Я хочу использовать сопоставление структурных шаблонов Python, чтобы различать кортеж (например, представляющий точку) и список кортежей. Однако простой подход не работает: def fn(p): match p: case (x, y): print(f"single point: ({x}, {y})") case [*p…
19 ноя '21 в 14:42
1
ответ
Можете ли вы перегрузить оператор матча?
В python есть много операторов, которые можно перегружать (например, +). Но просматривая документы для python 3.10 и PEP 622, мне было интересно, можно ли то же самое сделать для match оператор (например, для упрощения представления объекта) - или э…
08 дек '21 в 14:21
2
ответа
Невозможно вычесть в случае шаблона?
Я пытаюсь использовать сопоставление структурных шаблонов Python 3.10 в оболочке Python: match a: case (2 - 1): после ввода второй строки выдает следующую ошибку: File "<stdin>", line 2 case (2 - 1): ^ SyntaxError: imaginary number required in…
06 янв '22 в 04:19
1
ответ
Сопоставление с образцом для проверки протокола. Получение TypeError: вызываемый шаблон соответствия должен быть типом
Мне нужно сопоставить случаи, когда ввод является итерируемым . Вот что я пробовал: from typing import Iterable def detector(x: Iterable | int | float | None) -> bool: match x: case Iterable(): print('Iterable') return True case _: print('Non ite…
01 мар '22 в 19:41
1
ответ
Безопасное индексирование с сопоставлением с образцом в Python
У меня есть огромный список слов corpusи конкретное слово. Я знаю индекс каждого появления в корпусе. я хочу посмотреть на nразмер окна вокруг каждого случая wи создайте словарь других слов, встречающихся в этом окне. Словарь представляет собой отоб…
16 фев '22 в 02:20
1
ответ
Сопоставление элемента в неизвестном месте последовательности с использованием сопоставления структурных шаблонов в Python 3.10
Есть ли какой-нибудь умный способ сопоставить элемент в неизвестном месте в последовательности неизвестной длины, используя сопоставление структурных шаблонов в Python 3.10? Ниже приведен нерабочий пример, иллюстрирующий то, что я хотел бы сделать. …
22 фев '22 в 21:25
1
ответ
Шаблон класса соответствует неправильным случаям
Я пишу сериализатор объектов, но у меня возникают проблемы, когда шаблоны классов не соответствуют ожидаемым случаям: def dump_obj(x): match(x): case list(): emit('L') dump_obj(len(x)) for elem in x: dump_obj(elem) case Iterable(): emit('I') dump_ob…
01 мар '22 в 21:25
0
ответов
сопоставление структурного шаблона: сопоставьте объект типа с определенным классом
Я хотел бы написать блок сопоставления с образцом, который определяет, является ли сопоставляемый объект typeобъект /class, например, или . Не их экземпляр , а фактический объект класса или . Это : x = int match x: case str: print("x is str") case i…
16 фев '22 в 17:06
5
ответов
Сопоставление структурных шаблонов с использованием регулярных выражений
У меня есть строка, которую я пытаюсь проверить на соответствие нескольким шаблонам регулярных выражений, и я надеялся, что, поскольку сопоставление шаблонов доступно в версии 3.10, я мог бы использовать это вместо создания блока if-else. Рассмотрим…
12 янв '22 в 10:58
3
ответа
Как использовать сопоставление структурных шаблонов Python для тестирования встроенных типов?
Я пытаюсь использовать SPM, чтобы определить, является ли определенный тип intили str. Следующий код: from typing import Type def main(type_to_match: Type): match type_to_match: case str(): print("This is a String") case int(): print("This is an Int…
26 янв '22 в 11:26
1
ответ
Путаница между использованием `|` для объединения двух словарей и в случае совпадения
мы знаем, что он используется для объединения двух словарей, например, dct_1 = {'a': 1} dct_2 = {'b': 2} print(dct_1 | dct_2) дает, {'a': 1, 'b': 2} но если кто-то хочет использовать одно и то же в match-case для объединения двух словарей, x = {'a':…
03 май '22 в 17:28
0
ответов
Сопоставление структурных шаблонов в python <3.10
Чтобы использовать | оператор в <3.10, можно сделать from __future__ import annotations. Возможно ли что-то подобное для сопоставления структурных шаблонов, т.е. написание таких вещей, как match x: case 1: print("x is 1") case 2: print("x is 2")
25 апр '22 в 11:04