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

1 投票
3 回答
1701 浏览
提问于 2025-04-17 02:02

我刚接触Python,真的很喜欢用字典来代替switch/case语句的这个概念,但有一个问题我搞不明白。

假设我们有一个“Python风格的case”语句。

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

这个方法很好用,但我不知道怎么像在其他语言(比如Java)中那样运行一段代码,像这样:

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

也许可以用lambda来解决这个问题?

非常感谢!

3 个回答

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')
3

只需要用 if...elif...else 这种方式就可以了。其实并没有那么复杂:

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

字典里的值必须是某种对象。这意味着你基本上需要把想要运行的代码放在一个在别处定义的函数里。你可以尝试使用 exec,比如你可以创建一个包含字符串的字典,然后从字典中用 exec 执行一个字符串,但我不太推荐这样做。

lambda 在某种程度上可以回答你的问题,但 lambda 的使用范围有限;它只能创建一行的函数,还有其他一些限制。不过,对于非常简单的函数来说,它还是够用的。

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

如果你有较长的代码块,最好的办法就是简单地定义一个函数或方法。

撰写回答