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

2024-09-30 02:35:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在代码中实现了第二个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)

当我执行代码时,它不会转到正确的情况,但会执行其中的每一个:aka 1,然后2,然后0

有没有办法解决这个问题。看在上帝的份上,我找不到问题所在。 对我来说最令人沮丧的是,在我看来,有效的switch语句和这个被破坏的语句实际上是一样的


Tags: 代码adddatagetdef语句graphcase
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]()

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

可以使用以下函数定义模拟开关语句:

def switch(v): yield lambda *c: v in c

使用它将使代码更加清晰:

for case in switch(caseSelected):

    if case(1):
        graph.addFullNC(data[1], data[0])
        break

    if case(2):
        graph.addFullNC(data[0], data[1])
        break

    if case(0): 
        graph.addFullNC2(data[0], data[1])
        break
else:
    print("Something went wrong: GAD 44"))

您还可以将其与if/elif/else模式一起使用,而无需中断:

for case in switch(caseSelected):

    if   case(1):
         graph.addFullNC(data[1], data[0])

    elif case(2):
         graph.addFullNC(data[0], data[1])

    elif case(0): 
         graph.addFullNC2(data[0], data[1])

    else:
         print("Something went wrong: GAD 44"))

相关问题 更多 >

    热门问题