我是python的新手,我尝试在python中实现切换案例的实现,我已经发现了这一点,但无法正常工作。它返回所有这种情况
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],它将返回所有功能。
最佳答案
如@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 Bailey指出的那样,由于您已经在检查
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()
关于python - Python3开关不起作用,返回所有情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55784098/