2011-09-11 43 views
1

我是新来的蟒蛇,我真的很喜欢使用字典而不是开关/ case语句的概念,但有一个问题,我想不出如何运行的代码块蟒蛇case语句里面

让我们说我们有一个“Python的情况下,”声明

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

这工作得很好,但我无法弄清楚如何在像Java语言编写的运行一些代码块一样,这东西看起来像这样

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

也许lambda可以帮忙吗?

非常感谢你

+2

Python没有switch语句,试图让它移植一个on –

回答

3

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

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

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

用较长的代码块做到这一点的最好方法是简单地定义一个函数或方法。

3

只需使用if...elif...else。这并不是很糟糕:

if x == 'a': 
     pass 
    elif x == 'b': 
     pass 
    elif x == 'c': 
     pass 
    else: 
     pass 
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')