Python3 Switch无法正常工作,返回所有案例

问题描述 投票:1回答:1

我是python的新手,我尝试在python中创建一个switch-case实现,我已经发现了这个,但它不起作用。它返回所有这种情况

if not (data.message is None):
    if data.message[0] == "/":
        command = data.message.split("/")
        if not (command[1] is None):
            switcher = {
                "location" : funcA(data.id),
                "carousel" : funcB(data.id, data.name),
                "button" : funcC(data.id),
                "card" : funcD(data.id, data.name)
            }
            return switcher.get(command[1], funcE())
        else:
            return funcE()
    else:
        return funcE() 

然后,我用'/ asd'测试输入命令[1],它将返回所有的功能。

python switch-statement
1个回答
1
投票

正如@snakecharmerb所提到的,在你的字典值中,你应该命名不调用它们的函数:

switcher = {
    "location" : funcA,
    "carousel" : funcB,
    "button" : funcC,
    "card" : funcD
}

如果密钥存在于字典中,请在data.id语句中指定参数return

return switcher[command[1]](data.id) if command[1] in switcher else funcE()

此外,您可以用if not (data.message is None)替换if message并将其与data.message[0] == "/"结合使用。

正如@Mark Ba​​iley指出的那样,既然你已经在检查command[1]是否在switcher,你可以完全删除第二个if声明。

总而言之:

if data.message and data.message[0] == "/":
    command = data.message.split("/")
    switcher = {
        "location" : funcA,
        "carousel" : funcB,
        "button" : funcC,
        "card" : funcD
    }
    return switcher[command[1]](data.id) if command[1] in switcher else funcE()
else:
    return funcE()

编辑:为了支持向函数传递可变数量的参数,您可以在字典中指定参数列表,并通过解包将其传递给函数:

if data.message and data.message[0] == "/":
    command = data.message.split("/")
    switcher = {
        "location" : [funcA,[data.id,data.name]],
        "carousel" : [funcB,[data.id]],
        "button" : [funcC,[data.id,data.name]],
        "card" : [funcD,[data.id,data.name, data.time]]
    }
    return switcher[command[1]][0](*switcher[command[1]][1]) if command[1] in switcher else funcE()
else:
    return funcE()
© www.soinside.com 2019 - 2024. All rights reserved.