Instrukcja match

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

WPROWADZENIE

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

INSTRUKCJA MATCH


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