如何在python case语句中运行代码块

时间:2011-09-11 12:36:48

标签: python dictionary lambda case switch-statement

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

假设我们有'pythonic case'陈述

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

这很好用,但是我无法弄清楚如何像java这样的其他语言运行一些代码块,看起来像这样的东西

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

也许lambda可以提供帮助吗?

非常感谢

3 个答案:

答案 0 :(得分:3)

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

lambda会部分回答您的问题,但lambda的适用性有限;它只能创建一行功能,以及其他限制。尽管如此,对于非常简单的功能来说,这已足够。

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

使用更长的代码块执行此操作的最佳方法是简单地定义函数或方法。

答案 1 :(得分:3)

只需使用if...elif...else即可。这并不坏:

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

答案 2 :(得分:2)

您需要将代码放入函数中。然后你可以创建一个函数字典,但是已经有一个概念可以在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')