Instrukcja Switch w Pythonie

Wprowadzenie

Instrukcja switch jest potężnym i wygodnym narzędziem do kontrolowania przebiegu programu. Pozwala szybko i łatwo tworzyć wiele gałęzi kodu, w zależności od wartości danej zmiennej lub wyrażenia. Jest powszechnie używany, gdy trzeba wykonać inną logikę w zależności od wartości danej zmiennej, która może mieć więcej niż 2 (ale skończoną liczbę) wartości.

W tym artykule zbadamy, jak używać instrukcji switch w Pythonie i omówimy jej zalety w porównaniu z innymi strukturami kontrolnymi. Niezależnie od tego, czy jesteś nowicjuszem w Pythonie, czy doświadczonym programistą, instrukcja switch może pomóc Ci napisać czystszy i wydajniejszy kod.

Przed wersją 3.10

Zanim instrukcja switch Pythona była natywnie dostępna w języku, programiści musieli używać innych struktur kontrolnych, aby osiągnąć tę samą funkcjonalność. Jednym z powszechnych podejść było użycie serii instrukcji if-else, przy czym każda gałąź kodu była powiązana z inną wartością testowanej zmiennej.

Rozważmy na przykład następujący kod:

value = "foo"

if value == "foo":
    print("foo was selected")
elif value == "bar":
    print("bar was selected")
else:
    print("Nothing valid was selected")

W tym kodzie używamy instrukcji if-else, aby określić, która gałąź kodu ma zostać wykonana na podstawie wartości zmiennej value. Jeśli value jest równe „foo”, zostanie wykonana pierwsza gałąź kodu. Jeśli value jest równe „słupkowi”, zostanie wykonana druga gałąź kodu. W przeciwnym razie kod w else blok zostanie wykonany.

Chociaż to podejście działa, może szybko stać się nieporęczne w miarę wzrostu liczby możliwych wartości zmiennej. Ponadto może sprawić, że kod będzie trudny do odczytania i zrozumienia.

Innym podejściem, które można wykorzystać do stworzenia instrukcji typu switch w Pythonie, jest użycie słownika. W tym podejściu klucze słownika to możliwe wartości testowanej zmiennej, a wartości to odpowiadające im gałęzie kodu.

Rozważmy na przykład następujący kod:

value = "foo"

switch = {
    "foo": lambda: print("foo was selected"),
    "bar": lambda: print("bar was selected"),
    "default": lambda: print("Nothing valid was selected"),
}

switch.get(value, "default")()

W tym kodzie zdefiniowaliśmy słownik o nazwie switch, z kluczami reprezentującymi możliwe wartości zmiennej value. Dla każdego klawisza przypisaliśmy funkcję lambda jako wartość, która zawiera odpowiednią gałąź kodu. Aby wykonać odpowiednią gałąź kodu, używamy get() metoda słownika, która pozwala nam określić domyślną wartość do użycia, jeśli dany klucz nie istnieje w słowniku.

Chociaż to podejście jest bardziej elastyczne i zwięzłe niż użycie instrukcji if-else, nadal może być trudne do odczytania i zrozumienia, zwłaszcza jeśli kod w każdej gałęzi jest złożony. Dodatkowo wymaga użycia funkcji lambda, co dla niektórych programistów może być mylące. Nie zalecamy korzystania z tej metody, chyba że z jakiegoś powodu nie możesz użyć innych metod opisanych w tym artykule.

Wraz z wprowadzeniem instrukcji switch w języku Python w wersji 3.10 programiści mają teraz wygodniejszy i bardziej intuicyjny sposób kontrolowania przebiegu swoich programów w oparciu o wartość danej zmiennej lub wyrażenia. W następnej sekcji przyjrzymy się, jak używać rzeczywistej instrukcji switch w Pythonie.

Połączenia match/case Oświadczenie (po wersji 3.10)

Po Pythonie 3.10 instrukcja switch jest obsługiwana przy użyciu metody match słowo kluczowe. To słowo kluczowe służy do tworzenia wyrażenia dopasowującego do wzorca, które umożliwia testowanie wartości danej zmiennej lub wyrażenia względem serii wzorców. Jeśli zostanie znalezione dopasowanie, wykonywana jest odpowiednia gałąź kodu.

Rozważmy na przykład następujący kod:

value = "foo"

match value:
    case "foo":
        print("foo was selected")
    case "bar":
        print("bar was selected")
    case _:
        print("Nothing valid was selected")

Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!

W tym kodzie używamy match słowo kluczowe, aby utworzyć wyrażenie pasujące do wzorca, które sprawdza wartość zmiennej value przeciwko serii wzorców. Jeśli value jest równe „foo”, zostanie wykonana pierwsza gałąź kodu. Jeśli value jest równe „słupkowi”, zostanie wykonana druga gałąź kodu. W przeciwnym razie zostanie wykonany kod w bloku else.

Upadek

Jedną z kluczowych różnic między instrukcjami switch w Pythonie a tradycyjnymi instrukcjami switch w innych językach jest to, że Python match instrukcja nie obsługuje upadku. Innymi słowy, po znalezieniu dopasowania i wykonaniu odpowiedniej gałęzi kodu, plik match wyrażenie się kończy i żaden inny kod w match wykonywana jest instrukcja. W innych językach zwykle osiąga się to za pomocą break słowo kluczowe, które nie jest tu potrzebne ani obsługiwane.

Jeśli chcesz osiągnąć takie samo zachowanie jak fall-through w tradycyjnej instrukcji switch, możesz użyć metody | operator, aby dopasować wiele przypadków. Ten operator umożliwia określenie wielu wzorców w jednym case, a każdy z wzorców można dopasować, aby wywołać wykonanie tej gałęzi.

Rozważmy na przykład następujący kod:

value = "y"

match value:
    case "yes" | "y":
        print("The user confirmed")
    case _:
        print("The user denied")

Tutaj, jeśli wartość value jest równe „tak” or „y”, zostanie wykonana pierwsza gałąź kodu. Jest to równoważne z zachowaniem typu fall-through w tradycyjnej instrukcji switch.

Defaults

Jak zapewne zauważyłeś z powyższych przykładów, „domyślna” wielkość liter jest obsługiwana za pomocą podkreślenia (_). Jest to uważane za „znak wieloznaczny” i pasuje do wszystkich wartości. Jeśli jeden z poprzednich przypadków pasuje do wartości, domyślna gałąź kodu jest pomijana i nie jest wykonywana.

Wnioski

Jak widać, instrukcja dopasowania Pythona (znana również jako „przełącznik”) oferuje potężny i wygodny sposób kontrolowania przebiegu programu. Niezależnie od tego, czy jesteś nowicjuszem w Pythonie, czy doświadczonym programistą, instrukcja switch może pomóc Ci napisać czystszy i wydajniejszy kod.

Znak czasu:

Więcej z Nadużycie stosu