case/switch语句的Python等价物是什么?

use*_*844 402 python case-statement switch-statement

我想知道,是否有一个Python等效的case语句,如VB.net或C#上提供的示例?

Pra*_*mar 507

虽然官方文档很乐意不提供切换,但我看到了使用词典解决方案.

例如:

# define the function blocks
def zero():
    print "You typed zero.\n"

def sqr():
    print "n is a perfect square\n"

def even():
    print "n is an even number\n"

def prime():
    print "n is a prime number\n"

# map the inputs to the function blocks
options = {0 : zero,
           1 : sqr,
           4 : sqr,
           9 : sqr,
           2 : even,
           3 : prime,
           5 : prime,
           7 : prime,
}
Run Code Online (Sandbox Code Playgroud)

然后调用等效的开关块:

options[num]()
Run Code Online (Sandbox Code Playgroud)

如果你严重依赖于跌倒,这就开始分崩离析了.

  • 字典必须在函数定义之后 (19认同)
  • 另外,2是素数 (15认同)
  • 关于堕落,你不能使用`options.get(num,default)()`,还是我误解了? (6认同)
  • @IanMobbs将代码放在引号中的常量字符串中然后"eval"它几乎不是**"正确".1)编辑没有检查代码的有效性.2)在编译时它没有被优化为字节码.3)你看不到语法高亮.4)如果你有多个引号,那真的很棒 - 你的评论确实需要逃避!如果你想要简洁,你可以使用`lambda`代替,虽然我认为它被认为是非pythonic. (5认同)
  • 我认为我的意思更多的是标签执行某些代码的情况,然后继续进入另一个标签的块. (4认同)
  • 实际上,构建一个字典,其中的值是用于替换“switch...case”的函数,这将是矫枉过正的,并且在几乎所有情况下都过于复杂。正确的替换是 @Lennardregebro 的答案中所述的“if/elif/else”。这应该是理所当然的。 (3认同)
  • 在这个宇宙中,一种语言如何需要 30 年才能实现这一点??? (3认同)
  • 由于所有函数定义和调用,仅使用“if”和“elif”语句可能会更便宜。 (2认同)

Len*_*bro 154

直接替换是if/ elif/ else.

但是,在许多情况下,有更好的方法在Python中执行此操作.请参阅" Python中的switch语句的替换? ".