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

时间:2013-08-11 21:23:43

标签: python switch-statement

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

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

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版本也简洁:

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));

2 个答案:

答案 0 :(得分:2)

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

if option == 0:
    #your actions for option 0
elif option == 1:
    #your actions for option 1
else:
    #the default case

答案 1 :(得分:0)

这是一种用于实现语法近似的简洁解决方法:

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

用法:

module_scope_var = 3

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

输出:

#2!!!
woot!
6

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