如何在python中编写嵌套的开关盒?

时间:2019-11-21 10:06:30

标签: python-3.x switch-statement

那有可能吗?

到目前为止我所知道的:

Python不会切换大小写,但是它们有一个叫做字典映射的东西。

def fun1():print("fun1")
def fun2():print("fun2")
def fun3():print("fun3")

def WannaBeSwitch(arg):
    switch = {
        0: fun1,
        1: fun2,
        2: fun3
    }
    return switch.get(arg, "blabla")

if __name__ == "__main__":
    argument = 1
    call_func = WannaBeSwitch(argument)
    call_func()

2 个答案:

答案 0 :(得分:0)

我正在研究需要实现嵌套开关的python项目。 Eamileann的回答对我很有帮助。 这是基于Eamileann的答案的工作示例。这个例子是我在项目中如何实现的。您可以进行更改以使其适合您的需求。

def fun1_1():print("fun1_1")
def fun1_2():print("fun1_2")
def fun1_3():print("fun1_3")

def fun1(sub_case):
    sub_switch = {
        1: fun1_1,
        2: fun1_2,
        3: fun1_3
    }
    sub_switch.get(sub_case, default_case)()
    return

def fun2_1():print("fun2_1")
def fun2_2():print("fun2_2")
def fun2_3():print("fun2_3")

def fun2(sub_case):
    sub_switch = {
        1: fun2_1,
        2: fun2_2,
        3: fun2_3
    }
    sub_switch.get(sub_case, default_case)()
    return

def fun3_1():print("fun3_1")
def fun3_2():print("fun3_2")
def fun3_3():print("fun3_3")

def fun3(sub_case):
    sub_switch = {
        1: fun3_1,
        2: fun3_2,
        3: fun3_3
    }
    sub_switch.get(sub_case, default_case)()
    return

def default_case(): print("Unsupported case!")

main_switch = {
    1: fun1,
    2: fun2,
    3: fun3
}


if __name__ == "__main__":
    main_case = 2
    sub_case = 3
    main_switch.get(main_case)(sub_case)

答案 1 :(得分:-1)

我不知道您所说的嵌套开关大小写到底是什么意思,但是如果我理解正确,在辅助函数中使用字典映射就没有问题。我的意思是,以您的示例作为示例,这样的事情是可能的:

def fun1_1():print("fun1_1")
def fun1_2():print("fun1_2")
def fun1_3():print("fun1_3")

def fun1(arg):
    switch = {
        0: fun1_1,
        1: fun1_2,
        2: fun1_3
    }
    return switch.get(arg, "blabla")

def fun2_1():print("fun2_1")
def fun2_2():print("fun2_2")
def fun2_3():print("fun2_3")

def fun2(arg):
    switch = {
        0: fun2_1,
        1: fun2_2,
        2: fun2_3
    }
    return switch.get(arg, "blabla")

def fun3_1():print("fun3_1")
def fun3_2():print("fun3_2")
def fun3_3():print("fun3_3")

def fun3(arg):
    switch = {
        0: fun3_1,
        1: fun3_2,
        2: fun3_3
    }
    return switch.get(arg, "blabla")

def WannaBeSwitch(arg):
    switch = {
        0: fun1,
        1: fun2,
        2: fun3
    }
    return switch.get(arg, "blabla")

if __name__ == "__main__":
    argument1 = 1
    argument2 = 1
    call_func = WannaBeSwitch(argument1)(argument2)
    call_func()

尽管如此,它看起来还是不太可读...也许您写了您想使用它的确切内容以及如何使用它,我可以为您提供更多有用的答案。