Pythonic 2 (헬퍼함수) - python series 2
Categories: Python
Tags: cleancode, codingskill, PEP8, python
❓ 복잡한 표현식? -> 헬퍼함수
✓ 파이썬에서는 많은 로직을 한 줄로 쓰는 경우가 빈번하다. 예를들면 다음을 보자.
URL에서 오는 쿼리 문자열을 decode 한 것이다.
from urllib.parse import parse_qs
my_values = parse_qs('red=1&blue=0&green=',keep_blank_values=True)
하지만 쿼리 문자열 파라미터에 따라 값이 여러개일 수 있고, 한 개일 수도 있으며 비어있을 수도 있고 파라미터가 없을 수도 있다.
이 때 기본적인 default 값을 지정할 수 있으면 좋을 텐데, 이러한 로직에 if
문 까지 써야할까? 다음과 같이 처리하면 boolean 방식으로 처리할 수 있다.
red = my_values.get('red',[''])[0] or 0
빈 문자열, 빈 리스트, 0이 모두 False로 평가되는 파이썬의 특징을 이용한 것인데, 첫 표현식이 False라면 두번째 표현식이 대입되는 과정이다.
하지만 이 표현식은 읽기 어렵다. 결국 문자열이기 때문에 정수값으로 파싱까지 하게되면 다음과 같이 너무 복잡해진다.
red = int(my_values.get('red',[''])[0] or 0)
이를 삼항연산자로 풀어보자. 그렇다면 다음과 같다.
red = my_values.get('red',[''])
red = int(red[0]) if red[0] else 0
하지만 이 모든 로직을 반복하여 사용해야 한다면 헬퍼함수를 쓰는 게 좋다.
def get_int(values, key, default=0):
found_str = values.get(key,[''])
if found_str[0]:
found_str = int(found_str[0])
else:
found_str = default
return found_str
결국 호출코드는 다음과 같아진다.
red = get_int(my_values,'red')
- 삼항 연산자를 사용하지 않아서 -> 명확하다
- 한 줄로 표현할 로직을 따로 분리했다 -> 이해하기 쉽다.
표현식이 복잡해진다면 재빨리 작은조각으로 분리하여 헬퍼함수로 옮기는 방안이 좋다.
무조건 짧은코드 보다는 가독성을 선택하자.
짧다고 좋은게 아니다.
😎 핵심
- 파이썬은 한 줄짜리를 만들기 쉽지만 복잡하고 읽기 어렵다
- 복잡한 로직은 헬퍼 함수로 옮기자.
Leave a comment