2011-09-11 2 views
1

내가 파이썬에 새로운 그리고 난 정말 대신 스위치/케이스 문 사전을 사용하는 개념처럼,하지만 한 가지 문제가 내가하자파이썬 case 문 내부 코드의 블록을 실행하는 방법을

알아낼 수 없습니다 우리는 '파이썬 경우'문

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

이 잘 작동하지만 자바와 같은 다른 언어로 같은 코드의 일부 블록을 실행하는 방법을 알아낼 수 없습니다,이

처럼 보이는 무언가가 있다고
{ 
    'a': { some commands here } 
    'b': { other commands here that are executed } 
}['a'] 

아마도 람다가 도울 수 있을까요?

고맙습니다.

+2

파이썬에는 switch 문이 없습니다. –

답변

3

사전 값은 어떤 종류의 개체 여야합니다. 즉, 본질적으로 다른 곳에서 정의 된 함수 내에서 실행하려는 코드를 캡슐화해야합니다. exec으로 장난감을 연주 할 수 있습니다. 예를 들어, 문자열의 사전을 생성 한 다음 exec의 문자열을 작성할 수 있습니다.하지만 권장하지는 않습니다.

lambda 일부 질문에 답변했지만, lambda의 적용 범위는 제한되어 있습니다. 다른 제한 사항들 중에서도 단 한 줄의 함수 만 만들 수 있습니다. 여전히 아주 간단한 함수의 경우 충분합니다.

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