【问题标题】:how to run block of code inside python case statement如何在python case语句中运行代码块
【发布时间】:2011-09-11 12:36:48
【问题描述】:

我是 python 新手,我非常喜欢使用字典而不是 switch/case 语句的概念,但是有一个问题我想不通

假设我们有一个“pythonic case”语句

{
    'a': somemethod,
    'b': othermethod
}['a']()

这很好用,但我不知道如何像 java 等其他语言一样运行一些代码块,看起来像这样

{
    'a': { some commands here }
    'b': { other commands here that are executed }
}['a']

也许 lambda 会有所帮助?

非常感谢

【问题讨论】:

  • Python 没有 switch 语句,放弃尝试嫁接一个

标签: python dictionary lambda case switch-statement


【解决方案1】:

字典值必须是某种对象。这意味着您本质上必须将要运行的代码封装在其他地方定义的函数中。你可以玩弄exec——例如,你可以创建一个字符串字典,然后exec一个来自字典的字符串——但我不推荐它。

lambda 确实部分回答了您的问题,但lambda 的适用性有限;除其他限制外,它只能创建单行功能。不过,对于非常简单的功能,它就足够了。

>>> d = {
...      'a': lambda: 5 + 5,
...      'b': lambda: 10 + 10
...     }
>>> d['a']()
10

使用较长代码块的最佳方法是简单地定义一个函数或方法。

【讨论】:

    【解决方案2】:

    只需使用if...elif...else。还不错:

        if x == 'a':
            pass
        elif x == 'b':
            pass
        elif x == 'c':
            pass
        else:
            pass
    

    【讨论】:

      【解决方案3】:

      您需要将代码放入函数中。然后,您可以创建一个函数字典,但在 Python 中已经有一个概念可以为您做到这一点:使用类。

      class Foo:
         def cmd_a(self): ...
         def cmd_b(self): ...
         def cmd_c(self): ...
         def default_action(self): ...
         def execute(self, cmd):
             action = getattr(self, 'cmd_'+cmd, self.default_action)
             return action()
      
      foo = Foo()
      foo.execute('a')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多