Оператор match

Оновлено: 24.04.2023

Оператор match використовується для зіставлення шаблону. Синтаксис:

match_stmt   ::=  'match' subject_expr ":" NEWLINE INDENT case_block+ DEDENT
subject_expr ::=  star_named_expression "," star_named_expressions?
                  | named_expression
case_block   ::=  'case' patterns [guard] ":" block

Зіставлення шаблону приймає шаблон як вхідні дані (після case) і значення теми (після match). Шаблон (який може містити підшаблони) зіставляється зі значенням теми. Результати:

Успіх або невдача збігу (також називається успішним або невдалим шаблоном). Можливе прив’язування відповідних значень до імені. Передумови для цього обговорюються нижче.

Ключові слова match і case є м’якими ключовими словами.

>>> 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