match, case
Dopasowanie wzorców: wybór gałęzi kodu na podstawie wartości i kształtu danych.
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
#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
#- if, elif, elseInstrukcja warunkowa wykonująca różny kod zależnie od warunków.
- Rozpakowywanie sekwencjiPrzypisanie elementów krotki lub listy do kilku zmiennych naraz.
- dict.get()Zwraca wartość dla klucza albo wartość domyślną, gdy klucza nie ma w słowniku.
- enumWyliczenia: zestaw nazwanych stałych, np. poziomów trudności albo statusów zadania, zamiast luźnych napisów i liczb.
Widzisz błąd albo brakuje przykładu? Napisz do nas.