from urllib.parse import parse_qs
my_values = parse_qs('빨강=5&파랑=0&초록=', keep_blank_values=True)
print(repr(my_values))
{'빨강': ['5'], '파랑': ['0'], '초록': ['']}
결과 딕셔너리에 get 메서드를 사용하면 상황에 따라 다른 값 반환
print('빨강:', my_values.get('빨강'))
빨강: ['5']
print('초록:', my_values.get('초록'))
초록: ['']
print('투명도:', my_values.get('투명도'))
투명도: None
파라미터가 없거나 비어 있을 경우 0이 디폴트 값으로 대입하는 방법
red = my_values.get('빨강', [''])[0] or 0
green = my_values.get('초록', [''])[0] or 0
opacity = my_values.get('투명도', [''])[0] or 0
print(f'빨강: {red!r}')
print(f'초록: {green!r}')
print(f'투명도: {opacity!r}')
빨강: '5' 초록: 0 투명도: 0
print(f'빨강: {red}')
빨강: 5
이 식은 읽기 어려운 데다 우리가 원하는 모든 기능을 제공하지도 못한다.
우리는 모든 파라미터 값을 정수로 변환해서 즉시 수식에 활용하길 바란다.
그렇게 하려면 각 식을 int 내장 함수로 감싸서 문자열을 정수로 구문분석 해야한다.
red = int(my_values.get('빨강', [''])[0] or 0)
코드 이해하기 쉽지 않음
red_str = my_values.get('빨강', [''])
red = int(red_str[0]) if red_str[0] else 0
이 코드가 더 좋지만 덜 명확하다
green_str = my_values.get('초록', [''])
if green_str[0]:
green = int(green_str[0])
else:
green = 0
이게 더 명확하며 보기 좋다.
이 로직을 반복 적용하려면 (두 세번이라도) 꼭 도우미 함수를 작성해야한다.
def get_first_int(values, key, default=0):
found = values.get(key, [''])
if found[0]:
return int(found[0])
return default
green = get_first_int(my_values, '초록')
훨씬 명확하고 간편하다
식이 복잡해지기 시작하면 바로 식을 더 작은 조각으로 나눠서 로직을 도우미 함수로 옮길지 고려해야 한다.
가독성이 가치가 있다!!
복잡한 식을 표현할 수 있는 파이썬의 함축적인 문법이 이런 지저분한 코드를 만들어내지 않도록 하라.
'반복하지 말라(Don't Repeat Yourself)'는 뜻의 DRY 원칙을 따르라.