Quel est le motif Python n’est pas instruction switch ?
Réponses
Trop de publicités?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
La FAQ Python a cette réponse :
http://docs.Python.org/FAQ/Design.html#Why-isn-t-There-a-switch-or-case-Statement-in-Python
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 :
"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:
- la FAQ Python pour un résumé
- PEP 3103 pour tous les détails croustillants
Et ici, à stackoverflow il y a un sujet de projet de switch/case alternatives: