在Python交换机案例中包含多个语句的最简洁方法是什么?

What's the most concise way to include multiple statements in a Python switch case?

与大多数其他流行的编程语言不同,Python没有对switch语句的内置支持,因此我通常使用字典来模拟switch语句。

我认识到,通过为每种情况定义单独的嵌套函数,可以在case块中包含多个语句,但与其他语言的switch语句相比,这相当冗长:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def switchExample(option):
    def firstOption():
        print("First output!")
        print("Second output!")
        return 1
    def secondOption():
        print("Lol")
        return 2
    options = {
    0 : firstOption,
    1 : secondOption,
    }[option]

    if(options != None):
        return options()

print(switchExample(0))
print(switchExample(1))

除了我已经编写的实现之外,是否还有更简洁的方法来模拟Python中的switch语句?我注意到这个等效的javascript函数更简洁,更容易阅读,我希望python版本也更简洁:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function switchExample(input){
    switch(input){
        case 0:
            console.log("First output!");
            console.log("Second output!");
            return 1;
        case 1:
            console.log("Lol");
            return 2;
    }
}

console.log(switchExample(0));
console.log(switchExample(1));


作为一个快速简单的解决方案,我只需使用if、elif或else来模拟switch语句。

1
2
3
4
5
6
if option == 0:
    #your actions for option 0
elif option == 1:
    #your actions for option 1
else:
    #the default case


这里有一种老生常谈的解决方法来实现您语法的近似值:

1
2
3
4
def switch(option, blocks):
    for key in blocks:
        if key == option:
            exec blocks[key]

用途:

1
2
3
4
5
6
7
8
9
10
module_scope_var = 3

switch(2, {
    1:'''
print"hello"
print"whee"'''
,
    2:'''
print"#2!!!"
print"woot!"
print module_scope_var*2'''
})

输出:

1
2
3
#2!!!
woot!
6

不幸的是,这里有很多撇号,而且缩进看起来很奇怪。