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

如何在python case语句中运行代码块,python,dictionary,lambda,case,switch-statement,Python,Dictionary,Lambda,Case,Switch Statement,我是python新手,我非常喜欢使用字典而不是switch/case语句的概念,但有一个问题我无法解决 假设我们有一个“蟒蛇病例”陈述 { 'a': somemethod, 'b': othermethod }['a']() 这很好,但我不知道如何运行类似于其他语言(如java)的代码块,类似这样的代码块 { 'a': { some commands here } 'b': { other commands here that are executed } }[

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

假设我们有一个“蟒蛇病例”陈述

{
    'a': somemethod,
    'b': othermethod
}['a']()
这很好,但我不知道如何运行类似于其他语言(如java)的代码块,类似这样的代码块

{
    'a': { some commands here }
    'b': { other commands here that are executed }
}['a']
也许lambda能帮上忙


非常感谢

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

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

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

对于较长的代码块,最好的方法就是定义一个函数或方法

字典值必须是某种类型的对象。这意味着您必须将要在别处定义的函数中运行的代码封装起来。你可以玩弄
exec
——你可以创建一个字符串的dict,然后从dict中创建一个字符串,例如
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

只要使用
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')

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

Python没有switch语句,放弃尝试在上面移植Python没有switch语句,放弃尝试在上面移植