728x90
반응형
1. 복잡한 식 사용
파이썬은 문법이 간결하여 상당한 로직이 들어가는 식도 한 줄로 매우 쉽게 작성할 수 있다. 다음은 URL의 질의 문자열을 구문 분석하는 예제이다.
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('빨강'))
print('초록:', my_values.get('초록'))
print('투명도:', my_values.get('투명도'))
>>>
빨강: ['5']
초록: ['']
투명되: None
파라미터가 없거나 비어 있을 경우 0이 디폴트 값으로 대입되면 좋을 것이다. if 식을 통해 간단히 처리할 수 있다. 빈 문자열, 빈 리스트, 0이 모두 암시적으로 False로 평가되므로 오른쪽 식으로 계산된다.
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
하지만 이 식은 읽기 어려울뿐만 아니라 원하는 기능(정수로 변환해서 즉시 수식에 활용)을 수행하지 못한다. 원하는 기능을 위해서는 다음처럼 int 내장 함수로 감싸야 한다.
red = int(my_values.get('빨강', [''])[0] or 0)
하지만 읽기 어렵기 때문에 if/else 조건식을 활용할 수 있다.
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
2. 도우미 함수 활용
위 로직을 반복 적용하려면 도우미 함수를 작성해야 하며 훨씬 명확해진다.
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 원칙을 따르라.
728x90
반응형