Python에서 switch문 사용하기. if ~ elif 그만하고 싶을 때 ㅋㅋㅋ

     

 

python에서는 switch문이 없다. 그래서 여러 케이스를 비교할 경우 아래와 같이 짜곤 한다.

 

def do_something_0():
    print("do_something_0")
def do_something_1():
    print("do_something_1")
def do_something_2():
    print("do_something_2")
def do_something_3():
    print("do_something_3")
def do_something_4():
    print("do_something_4")
def do_something_5():
    print("do_something_5")
def do_something_6():
    print("do_something_6")


def do_something(x):
    if x == 0:
        do_something_0()
    elif x == 1:
        do_something_1()
    elif x == 2:
        do_something_2()
    elif x == 3:
        do_something_3()
    elif x == 4:
        do_something_4()
    elif x == 5:
        do_something_5()
    elif x == 6:
        do_something_6()

 

ㅋㅋㅋㅋ 뭔가 input으로 분기를 치려고 했는데, 점점 늘어나더니 너무 커진 경우다. 이렇게 if-elif로 할경우 시간복잡도는 O(n)이다. 

 

이런경우 각 케이스마다 에러처리가 필요하면 또 다시 일일이 넣어줘야 해서 상~~당히 불편한데, python에 특징을 이용하면 간단히 해결할 수 있다.

 

먼저 함수를 dict나 list로 만든다.

 

    dispatch = [do_something_0,
                do_something_1,
                do_something_2,
                do_something_3,
                do_something_4,
                do_something_5,
                do_something_6]

 

리스트로 만들 때 뒤에 ()요건 안붙여도 된다. 함수 자체를 넘기는게 아니라 이름만 넘기면 된다.

 

그 다음 들어오는 input을 dispatch[input]()으로 만들어주면 된다.

 

def do_something(x):
    dispatch = [do_something_0,
                do_something_1,
                do_something_2,
                do_something_3,
                do_something_4,
                do_something_5,
                do_something_6]

    dispatch[x]()

 

이렇게 할 경우 시간복잡도가 O(n)에서 O(1)로 바뀐다. 코드도 깔끔해진다. ㅋㅋㅋ

이건 파이썬에서 함수를 인자값으로 전달할 수 있기 때문에 가능한 방법이다. 

이게 된다

 

즉 함수를 인자값으로 넘기는 (dispatch방식)과 검색에서 dict형이 매우 빠르다는 것을 이용해서 if-elif를 대신할 switch문을 만들 수 있다.

 

파이썬 쓸 때 꿀팁~!

 

 

 

 

 

반응형

댓글

Designed by JB FACTORY