Огляд
Оновлено: 24.04.2023
Ось огляд логічної послідовності оператора збігу:
Вираз суб’єкта subject_expr обчислюється та отримується результуюче значення предмета. Якщо вираз теми містить кому, кортеж створюється за допомогою стандартних правил. Кожен шаблон у case_block намагається зіставити зі значенням теми. Конкретні правила успіху чи невдачі описані нижче. Спроба збігу також може пов’язати деякі або всі окремі імена в шаблоні. Точні правила зв’язування шаблону залежать від типу шаблону та вказані нижче. Прив’язки імен, зроблені під час успішного збігу шаблону, переживають виконаний блок і можуть використовуватися після оператора збігу. Примітка Під час невдалих збігів шаблонів деякі підшаблони можуть бути успішними. Не покладайтеся на прив’язки, зроблені для невдалого матчу. І навпаки, не покладайтеся на те, що змінні залишаться незмінними після невдалого збігу. Точна поведінка залежить від реалізації та може відрізнятися. Це навмисне рішення, яке дозволяє оптимізувати різні реалізації. Якщо шаблон успішний, відповідний охоронець (якщо присутній) оцінюється. У цьому випадку всі прив’язки імен гарантовано відбулися. Якщо guard оцінює як true або відсутній, виконується block всередині case_block. Інакше виконується спроба наступного case_block, як описано вище. Якщо немає інших блоків регістру, оператор збігу завершується.
Зразок заяви про відповідність:
>>> flag = False
>>> match (100, 200):
... case (100, 300): # Mismatch: 200 != 300
... print('Case 1')
... case (100, 200) if flag: # Successful match, but guard fails
... print('Case 2')
... case (100, y): # Matches and binds y to 200
... print(f'Case 3, y: {y}')
... case _: # Pattern not attempted
... print('Case 4, I match anything!')
...
Case 3, y: 200
У цьому випадку if flag є охороною. Докладніше про це читайте в наступному розділі.