Większość odpowiedzi tutaj jest dość stara, a zwłaszcza te zaakceptowane, więc warto je zaktualizować.
Po pierwsze, oficjalne FAQ Pythona obejmuje to i zaleca elif
łańcuch dla prostych przypadków i dict
dla większych lub bardziej złożonych przypadków. Sugeruje również zestaw visit_
metod (styl używany przez wiele frameworków serwerowych) w niektórych przypadkach:
def dispatch(self, value):
method_name = 'visit_' + str(value)
method = getattr(self, method_name)
method()
FAQ również wspomina PEP 275 , który został napisany, aby uzyskać oficjalną decyzję raz na zawsze o dodaniu instrukcji przełączania w stylu C. Ale ten PEP został odroczony do Pythona 3 i został oficjalnie odrzucony jako osobna propozycja, PEP 3103 . Odpowiedź brzmiała oczywiście nie - ale dwa PEP mają linki do dodatkowych informacji, jeśli interesują cię powody lub historia.
Jedną z rzeczy, które pojawiały się wiele razy (i można to zobaczyć w PEP 275, nawet jeśli zostało to wycięte jako rzeczywista rekomendacja) jest to, że jeśli naprawdę przeszkadza ci posiadanie 8 linii kodu do obsługi 4 przypadków, w porównaniu z 6 linie, które miałbyś w C lub Bash, zawsze możesz napisać to:
if x == 1: print('first')
elif x == 2: print('second')
elif x == 3: print('third')
else: print('did not place')
PEP 8 nie zachęca do tego, ale jest czytelny i niezbyt jednoznaczny.
Przez ponad dekadę od odrzucenia PEP 3103 kwestia instrukcji typu C lub nawet nieco bardziej rozbudowana wersja Go została uznana za martwą; ilekroć ktoś porusza to w python-pomysłach lub -dev, odnosi się do starej decyzji.
Jednak idea pełnego dopasowania wzorców w stylu ML pojawia się co kilka lat, zwłaszcza że takie języki, jak Swift i Rust ją przyjęły. Problem polega na tym, że trudno jest w dużym stopniu wykorzystać dopasowanie wzorca bez algebraicznych typów danych. Chociaż Guido był przychylny temu pomysłowi, nikt nie wpadł na propozycję, która bardzo dobrze pasuje do Pythona. (Możesz przeczytać mój strawman z 2014 r .). Może to ulec zmianie dataclass
w wersji 3.7 i sporadycznych propozycjach dotyczących bardziej wydajnej enum
obsługi typów sum lub różnych propozycji dla różnych rodzajów powiązań lokalnych instrukcji (takich jak PEP 3150 lub zestaw propozycji obecnie dyskutowanych na żywo). Ale jak dotąd tak nie było.
Od czasu do czasu pojawiają się również propozycje dopasowania w stylu Perla 6, które jest w zasadzie pomieszaniem wszystkiego, od elif
wyrażeń regularnych po przełączanie typów pojedynczej wysyłki.