“ Switch / case”语句在Python中执行所有可能的语句

时间:2020-08-19 00:10:23

标签: python switch-statement

我已经在我的代码中实现了第二个switch case语句,但是由于某种原因一个起作用而另一个不起作用。

有问题的一个是这样的:

def graph_add_depend(caseSelected, graph, data):
switcher = {
    1: graph.addFullNC(data[1], data[0]),
    2: graph.addFullNC(data[0], data[1]),
    0: graph.addFullNC2(data[0], data[1])
}.get(caseSelected, print("Something went wrong: GAD 44"))

我打电话给它:

graph_add_depend(is_added, graph, temp)

当我执行代码时,它不会进入正确的大小写,但将执行其中的每一个:又名1再2再0。

反正有解决此问题的方法。我靠上帝的爱无法找到问题所在。 对我来说,最令人沮丧的是,在我看来,有效的switch语句和这个损坏的语句实际上是相同的...

1 个答案:

答案 0 :(得分:2)

如果您不希望在不区分大小写的情况下调用该函数,则在构建字典时不要调用它。将每个案例包装在lambda中是延迟评估的一种很简单的方法:

def graph_add_depend(caseSelected, graph, data):
    return {
        1: lambda: graph.addFullNC(data[1], data[0]),
        2: lambda: graph.addFullNC(data[0], data[1]),
        0: lambda: graph.addFullNC2(data[0], data[1])
    }[caseSelected]()

请注意,如果KeyError不是有效的选项,则会自动引发caseSelected;通常,引发异常比打印消息而不返回任何内容更好。