https://docs.python.org/3/tutorial/controlflow.html#match-statements
https://docs.python.org/3/reference/compound_stmts.html#match
PEP 634 - Structural Pattern Matching: Specification
PEP 636 - Structural Pattern Matching: Tutorial
W Pythonie 3.10 pojawiła się instrukcja 'match', która pobiera wyrażenie i porównuje jego wartość z sekwencją wzorców podanych w blokach 'case'.
# Najprostsza forma instrukcji 'match'. def http_error(status, flag=False): match status: # wiersz nagłówkowy z dwukropkiem case 400: # blok 'case' return "Bad request" case 401 | 403 | 404: # można łączyć kilka wzorców (or) return "Not allowed" case 404: return "Not found" case 418 if flag: # użycie strażnika (ang. guard) return "I'm a teapot" case _: # opcjonalny przypadek domyślny, zawsze pasuje return "Something's wrong with the internet"
W bardziej złożonych przypadkach w blokach 'case' może występować podstawienie rozpakowujące (ang. unpacking assignment) powołujące do życia zmienne, które można następnie wykorzystać w bloku. Mogą pojawić się wyrażenia przypominające konstruktor klasy.
W Pythonie 3.10 pojawiły się 'miękkie słowa kluczowe' (ang. soft keywords), takie jak 'match', 'case', '_'. Te identyfikatory stają się słowami kluczowymi w kontekście instrukcji 'match', natomiast nie są słowami kluczowymi poza tym kontekstem. Chodzi o zachowanie kompatybilności z istniejącym kodem.