match, case

Dopasowanie wzorców: wybór gałęzi kodu na podstawie wartości i kształtu danych.

Na tej stronie

Przykład

#
Python
def handle(command):
    match command.split():
        case ["start"]:
            return "Rozpoczynam lekcję"
        case ["go", direction]:
            return f"Idę na {direction}"
        case ["score", *values] if values:
            return f"Suma: {sum(map(int, values))}"
        case _:
            return "Nieznane polecenie"

print(handle("start"))
print(handle("go północ"))
print(handle("score 10 20 5"))
print(handle("fly"))
Wynikzapisany wynik, możesz go sprawdzić
Rozpoczynam lekcję
Idę na północ
Suma: 35
Nieznane polecenie

Definicja i zastosowanie

#

Instrukcja match (od Pythona 3.10) porównuje wartość z kolejnymi wzorcami w blokach case i wykonuje pierwszy pasujący. Wzorzec case _: pasuje do wszystkiego i działa jak else.

W prostych zastosowaniach przypomina switch z innych języków. Jej siła leży jednak w dopasowywaniu struktury: możesz rozpakowywać krotki, listy i słowniki, łączyć wzorce przez | i dodawać warunki if.

Dopasowanie po nazwach zmiennych działa jak przypisanie, a nie porównanie. Do porównania ze stałą używaj literałów albo nazw z kropką, na przykład Color.RED.

Składnia

#
Składnia
match wartosc:
    case wzorzec:
        ...
    case _:
        ...

Więcej przykładów

#
Dopasowanie słowników
Python
event = {"type": "exercise", "exp": 20}

match event:
    case {"type": "exercise", "exp": exp}:
        print(f"+{exp} EXP za zadanie")
    case {"type": "login"}:
        print("Witaj ponownie")
Wynikzapisany wynik, możesz go sprawdzić
+20 EXP za zadanie

Dobre praktyki

#
  • Zawsze dodaj gałąź case _:, żeby obsłużyć nieprzewidziane wartości.
  • Do prostego porównania z kilkoma wartościami słownik bywa krótszy niż match.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.