【问题标题】:How to write a nested switch case in python?如何在python中编写嵌套的switch case?
【发布时间】:2020-03-17 05:26:46
【问题描述】:

这可能吗?

到目前为止我所知道的:

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

【问题讨论】:

  • 这能回答你的问题吗? Problems, building a switch case in python 3.7
  • 不,我的问题与此无关
  • @user12408677 你有没有读过我的问题和你建议的答案?
  • 不,在 python 中,不提供 switch case 工具。您可以按照您的说明使用 dict 映射或在类中实现它。如果你对为什么 python 没有 switch case 实现感兴趣,请查看 pep 解释:python.org/dev/peps/pep-3103

标签: python-3.x switch-statement


【解决方案1】:

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

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

尽管如此,它看起来不太可读......也许如果你写下你想用它做什么以及你想如何使用它,我可以给你更多有用的答案。

【讨论】:

  • 当我运行你的脚本时,我得到一个 NameError
  • 我没有提供工作代码(我没有尝试过),我只是想演示一下原理......那些缺点真的不公平......我会修复代码使其工作一旦我有机会尝试运行它。
  • 您想通过提供“无效代码”来帮助我!?所以请不要帮助我。
  • nvm,这是你要的吗?在Python中通过不同的方式肯定可以达到类似的效果,你只需要更精确地指定你需要的。
【解决方案2】:

我正在开发需要实现嵌套开关的 python 项目。 This answer 帮了我很多。 这是基于该答案的工作示例。这个例子是我如何在我的项目中实现它的。您可以根据自己的需要进行更改。

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    相关资源
    最近更新 更多