我需要一些代码方面的帮助。我想在 Python 中实现 switch case 模式,所以就像一些教程所说的那样,我可以为此使用字典,但这是我的问题:
# Type can be either create or update or ..
message = { 'create':msg(some_data),
'update':msg(other_data)
# can have more
}
return message(type)
但它对我不起作用,因为 some_data 或 other_data 可以为 None(如果没有则引发错误)并且 msg 函数需要简单(我不想在其中添加一些条件)。
这里的问题是每次都会执行函数 msg() 来填充字典。
与其他编程语言中通常不执行 case
中的代码的 switch case 模式不同,除非它是匹配的。
有没有其他方法可以做到这一点,还是我只需要做 if elif?
其实更像是这样:
message = { 'create': "blabla %s" % msg(some_data),
'update': "blabla %s" % msg(other_data)
'delete': "blabla %s" % diff(other_data, some_data)
}
所以 lambda 在这里不起作用并且调用的函数不同,所以它更像是我需要的一个真正的 switch case,也许我必须考虑另一种模式。
最佳答案
message = { 'create':msg(some_data or ''),
'update':msg(other_data or '')
# can have more
}
更好的是,为了防止 msg
被执行只是为了填充字典:
message = { 'create':(msg,some_data),
'update':(msg,other_data),
# can have more
}
func,data=message[msg_type]
func(data)
现在您可以自由地定义一个更合理的 msg
函数,它可以处理等于 None
的参数:
def msg(data):
if data is None: data=''
...
关于python - Python 中的 Switch-case 不起作用;需要另一种模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886641/