2011-09-11 5 views
1

私は、Pythonに新たなんだと私は本当に代わりに、スイッチ/ case文の辞書を使用しての概念のような、しかし、1つの問題があるが、私はレッツ・Pythonのcase文の内部でコードのブロックを実行する方法

把握することはできません私たちは「ニシキヘビケース」ステートメント

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

これは正常に動作しますが、私はJavaのような他の言語でのようなコードのいくつかのブロックを実行する方法を見つけ出すことはできません、この

ようになり何かを持っていると言います
{ 
    'a': { some commands here } 
    'b': { other commands here that are executed } 
}['a'] 

ラムダが助けてくれるかもしれませんか?

ありがとうございます

+2

Pythonにはswitch文がありません。 –

答えて

3

辞書の値は何らかのオブジェクトである必要があります。これは基本的に、他の場所で定義された関数内で実行したいコードをカプセル化する必要があることを意味します。 おもちゃexecとすることができます - あなたは文字列のdictを作成することができますし、次にexecの文字列をdictから作成することができます。

lambda一部ご質問にお答えしますが、lambdaはその適用範囲が制限されています。他の制限の中でも、1行の関数しか作成できません。それでも、非常に単純な関数の場合は適切です。

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

長いコードブロックでこれを行う最もよい方法は、単に関数またはメソッドを定義することです。

3

ただif...elif...elseを使用してください。それほど悪くはない:

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