2017-10-12 83 views
6

我是Python的新手。 请解释为什么python没有开关柜?为什么Python没有开关柜?

谢谢你这么多

+2

他们不是非常有帮助。坚持用'if ... elif'而不是'switch'更安全。如果你不小心,它们会导致可怕的错误。 – Unni

+0

有关解决方法,您可以参考[在Python中是否对开关/用例实现有任何价值?](https://stackoverflow.com/q/5440990/6521116) –

回答

18

我们认为,在一个点上,但无需一个方法来声明命名常量,是没有办法来产生一个有效的跳转表。所以我们只剩下一些语法糖,用于我们已经可以用if-elif-elif-else链进行的操作。

请参阅PEP 275PEP 3103进行全面讨论。

大致的原因是,各种建议未能满足人们对开关柜的要求的期望,他们未能改进现有的解决方案(如基于字典的调度,if-elif-chains,getattr-基于分派的分派或将老式的多态派送到具有相同方法的不同实现的对象)。

+2

案例1:'非常稳定,但没有*名为*常量,你必须在任何地方使用幻数,而且我们不需要一个鼓励幻数的语法结构。 – user2357112

0

即使Java,C++C#支持他们,我从来没有使用switch statements因为我可以用链式if语句完成相同的工作。

+2

不回答问题... – qwr

+0

尽管它没有回答问题1:1,但它是一个强有力的陈述,可以用作衡量它是否过时或不存在的度量。你有没有遇到过这种情况,你在寻找一个“switch”声明? – user1767754

+0

因为你从不需要性能问题(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') 

您可以在Python中使用此作为开关的情况下,如果条件不匹配,它将返回默认状态下,如果不匹配