2011-09-11 46 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')