2017-10-12 59 views
6

Jestem nowicjuszem w Pythonie. Proszę wyjaśnić, dlaczego python nie ma przełącznika?Dlaczego Python nie ma przełącznika?

Dziękuję bardzo

+2

Nie są one bardzo pomocne. Bezpieczniej jest trzymać się 'if ... elif' niż' switch'. Prowadzą do strasznych błędów, jeśli nie jesteś ostrożny. – Unni

+0

Aby obejść ten problem, odwołaj się do [Czy jest jakaś wartość dla implementacji przełącznika/obudowy w Pythonie?] (Https://stackoverflow.com/q/5440990/6521116) –

Odpowiedz

18

Uważaliśmy go w jednym punkcie, ale bez konieczności sposób deklarowania nazwanych stałych, nie ma sposobu, aby wygenerować efektywne tabelę skoku. Więc pozostaniemy z cukrem syntaktycznym dla czegoś, co moglibyśmy już zrobić z łańcuchami if-elif-elif-else.

Aby uzyskać pełną dyskusję, zobacz PEP 275 i PEP 3103.

W przybliżeniu uzasadnieniem jest to, że różne propozycje nie spełniły oczekiwań ludzi co do tego, co zrobi switch-case i nie udoskonalili istniejących rozwiązań (takich jak wysyłanie słowników, łańcuchy elifa, getattring). w oparciu o wysyłkę lub staroświecki odbiór polimorfizmu do obiektów o różnych implementacjach dla tej samej metody).

+2

'przypadek 1:' jest dość stały, ale bez * nazwane * stałe, musielibyśmy wszędzie używać magicznych liczb, a nie chcemy konstrukcji składni, która zachęca do magicznych liczb. – user2357112

3

Istnieje dosłownie sekcja w dokumentach, aby odpowiedzieć na to pytanie. Patrz poniżej:

Why isn’t there a switch or case statement in Python?

TL; DR: istniejące alternatywy (dynamiczny wysyłka poprzez getattr lub dict.get, if/elif łańcuchów) obejmować wszystkie przypadki użycia dobrze.

0

Nawet Java, C++, C# wsparcie to oni, nigdy nie używany switch statements jak mogę dostać tę samą pracę z Przykuty if.

+2

Nie odpowiada na pytanie ... – qwr

+0

Mimo że nie odpowiada na Pytanie 1: 1, jest to mocne stwierdzenie, które może być użyte jako miara do odgadnięcia, czy jest ono przestarzałe, czy nie. Czy kiedykolwiek miałeś przypadek, w którym szukałeś instrukcji "switch"? – user1767754

+0

Ponieważ nigdy nie potrzebujesz problemu z wydajnością (noob) :( –

1
def f(x): 
    return { 
     1 : 'output for case 1', 
     2 : 'output for case 2', 
     3 : 'output for case 3' 
    }.get(x, 'default case') 

Można to wykorzystać jako przypadku przełącznika w Pythonie i jeśli warunek nie pasuje powróci domyślne jeśli warunek nie pasuje