python - Python 中的 Switch-case 不起作用;需要另一种模式

标签 python design-patterns

我需要一些代码方面的帮助。我想在 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/

相关文章:

具有否定模式的 Python 正则表达式

java - 数据最小原则、软件架构

security - 要求唯一的电子邮件,同时不泄露现有用户的电子邮件

python - 文件名、目录名或卷标语法不正确 - virtualenvwrapper

python - 如何使用相同的数据库后端运行在同一服务器上运行多个实例的 Django 1.6 项目?

python - 退出并清理 python fork

python - 使用 train_test_split 后分类器准确率达到 100%

c# - 什么反对静态字段?

oop - 在 MVP 中, View (又名页面)是否应该知道模型的任何信息?

java - 什么是 DataVO 模式?