2017-04-19 1 views
0

파이썬에서 스위치/케이스 메커니즘을 구현하려고합니다. 여러 웹 사이트 및 질문 (예 : this one)을 읽은 후 아래 코드를 작성했습니다. 그러나 그것은 내가 이해할 수있는 것을 가지고있어서 틀린 행동을합니다. 심지어는 problematic to get이 될 수 있습니다. 내가 그것을 실행하면스위치/케이스의 파이썬 사전 교체 FAQ

def something(): 
    print 'something' 

def somethingElse(): 
    print 'something else' 

def switch(): 
    cases = { 
     0: something(), 
     1: something(), 
     2: something(), 
     3: something(), 
     4: something(), 
     5: something() 
     } 

    cases.get(2, somethingElse()) 

switch() 

내가 something() 한 번만 실행되도록 기대

(물론 모든 경우에 대해 동일 스위치는 단지 예를 위해입니다) (나는 수동으로 입력 2). 그러나 콘솔의 출력은 다음과 같습니다.

something 
something 
something 
something 
something 
something 
something else 

이것은 기본 값 실행과 함께 6 회 실행되었음을 의미합니다. 나는이 코드에서 그러한 추락을 허용하는 것을 이해할 수 없다. 아니면 문제가 다른가요?

여기는 Python 2.7.12입니다.

답변

1

사전은 사례를 생성 할 때 모든 단일 함수를 호출합니다. 문자열을 반환하기보다는 함수가 인쇄되어 (부작용) 콘솔에 인쇄 된 모든 문자열을 볼 수 있습니다.

대신 스위치가 함수를 반환해야하며 그 함수를 호출 할 수 있습니다.

def something(): 
    print 'something' 

def somethingElse(): 
    print 'something else' 

def switch(): 
    cases = { 
     0: something, 
     1: something, 
     2: something, 
     3: something, 
     4: something, 
     5: something 
     } 

    # All of the values in `cases` are functions so it is safe 
    # to call whatever `cases.get(...)` returns. 
    cases.get(2, somethingElse)() 

switch() 
+0

감사합니다 마찬가지로, 실수'()'함수를 실행하는 것 대신에 분명했다. 귀하의 측면 의견을 주셔서 감사합니다, 나는 그 문제를 해결합니다. – adamczi

1

함수 이름을 반환하고 호출해야합니다. 이

def something(): 
    print ('something') 

def somethingElse(): 
    print ('something else') 

cases = {1: something, 2: something, 3:something, 4:something,5:something} 
result = cases.get(2, somethingElse)() 

~

+0

고마워요, 당신 말이 맞습니다,하지만 나는 @ supersam654가 빨랐다 고 생각합니다! – adamczi