Python에서 switch문 사용하기. if ~ elif 그만하고 싶을 때 ㅋㅋㅋ
- Study/python
- 2021. 3. 19. 12:35
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문을 만들 수 있다.
파이썬 쓸 때 꿀팁~!
반응형
'Study > python' 카테고리의 다른 글
django, template을 이용한 웹페이지 만들다가 403 뜰 때, csrf_token 추가하기 (2) | 2022.03.26 |
---|---|
Pycharm community 버전에서 django 프로젝트 생성 (0) | 2021.08.10 |
Django(장고)에서 form을 이용한 style 활용법 (0) | 2021.02.03 |
Django mysql Full Text Index 먹이기 (0) | 2020.03.25 |
[ISSUE] Django migrate 문제 (0) | 2020.03.03 |