155 votes

Pourquoi n ' t Python ont une instruction switch ?

Quel est le motif Python n’est pas instruction switch ?

99voto

haggai_e Points 2143

Il a été proposé et rejeté en PEP 3103. Je ne sais pas pourquoi il ne l’avais pas au départ. Il y a un langage que j’ai vu ici qui peut remplacer l’instruction switch en utilisant un dict de valeur et d’actions :

Et il y a toujours la chaîne elif-if-else.

63voto

Nazgob Points 4548

Switch est un populaire odeur de code dans de nombreux langages à objets (lorsque vous suivez paradigme OO) et dans la plupart des cas, il indique qu'il devrait y avoir un appel polymorphe. Lorsque vous êtes sur le point d'écrire un interrupteur, arrêter pendant une minute et double-vérifier votre conception. Peut-être vous pouvez faire un appel polymorphe à la place.

Liés à la question suggéré dans les commentaires: les Moyens d'éliminer le commutateur dans le code

L'Article sur le commutateur et d'autres trucs similaires par Misko Hevery: http://misko.hevery.com/2008/12/08/clean-code-talks-inheritance-polymorphism-testing/

Plus sur les Instructions Switch Odeur: http://c2.com/cgi/wiki?SwitchStatementsSmell

//Édités après les suggestions dans les commentaires

52voto

projecktzero Points 937

20voto

bgbg Points 4713

3103 PEP parle juste ajouter l’instruction switch à Python. Cette suggestion a été rejetée par Guido.

Citant Guido :

Un sondage rapide au cours de mon allocution à PyCon 2007 montre que cette proposition n’a aucun soutien populaire. J’ai donc le rejeter.

Pour contourner le problème, vous pouvez dire quelque chose comme ceci :

11voto

Jarred McCaffrey Points 624

"Le Zen de Python", collé ci-dessous, vous mène à la réponse.

Lire les lignes 13 et 14. Après avoir vu des exemples de dicts utilisé pour la fonctionnalité de commutateur, il commence à cliquez sur que c' est le Pythonic façon de faire de l'instruction switch de moins en moins sujettes à l'erreur, de plus en plus forme lisible par l'homme.

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.  <-- 13
Although that way may not be obvious at first unless you're Dutch.     <-- 14
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Et, comme d'autres l'ont mentionné, plus détaillée des réponses peuvent être trouvées dans:

Et ici, à stackoverflow il y a un sujet de projet de switch/case alternatives:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X