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



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

假设我们有一个'pythonic case'语句

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

这工作得很好,但我不知道如何运行一些代码块,像在其他语言,如java,一些东西看起来像这样

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

也许lambda能帮上忙?

Thank you so much

字典值必须是某种类型的对象。这意味着您必须将想要在别处定义的函数中运行的代码封装起来。您可以玩弄exec——例如,您可以创建一个字符串字典,然后exec从字典中获取一个字符串——但我不推荐这样做。

lambda确实部分回答了你的问题,但lambda的适用性有限;除了其他限制外,它只能创建一行函数。但是,对于非常简单的函数,它是足够的。

>>> d = {
...      'a': lambda: 5 + 5,
...      'b': lambda: 10 + 10
...     }
>>> d['a']()
10
对于较长的代码块,最好的方法是简单地定义一个函数或方法。

只用if...elif...else。没那么糟:

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

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

相关内容

  • 没有找到相关文章