파이썬 코딩을 더 깔끔하게! #5

Dunno·2021년 7월 3일
0

Better Way 5. 복잡한 식을 쓰는 대신 도우미 함수를 작성하라.

파이썬은 복잡한 로직이 포함된 구문도 한 줄로 매우 쉽게 작성할 수 있다.

  • 예) URL의 질의 문자열을 파싱하고자 할 때
from urllib.parse import parse_qs

my_value = 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이 default값으로 대입되면 좋을 것이다.
이런 로직을 처리하기 위한 방법은 세 가지 이다.

  1. 완전한 if문을 사용한다.
  2. if식을 사용한다.
  3. 도우미 함수를 작성한다.
#질의 문자열이 '빨강=5&파랑=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

위의 코드는 가독성도 떨어지고 원하는 모든 기능을 제공해 주지 못한다.

if/else 조건식(삼항조건식) 사용

red_str = my_values.get('빨강', [''])
red = int(red_str[0]) if red_str[0] else 0

→ 코드를 간결하게 유지하면서 정수형으로 변환하는 등 다양한 기능을 제공해 준다.
→ 하지만 if/else 문보다는 명확하게 제공해주지 못한다.

if/else 문 사용

green_str = my_values.get('초록', [''])
if green_str[0]:
	greed = int(green_str[0])
else:
	green = 0

결론

이와 같이 복잡한 수식들을 표현하는 것은 가독성 면에서 굉장히 효율성이 떨어진다. 두 세번 반복해서 사용하는 경우 코드가 복잡해질 가능성이 있다.
그러므로 도우미 함수를 작성해 사용한다면 다음 장점들이 있다.
1. 가독성이 높다.
2. 원하는 기능을 모두 사용하면서도 복잡하지 않은 코드를 만들 수 있다.
3. 재생산성이 높다.

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, '초록')

기억해야 할 내용

  • 파이썬을 문법을 통해 복잡하고 어려운 수식도 쉽게 작성할 수 있다.
  • 복잡한 식을 도우미 함수로 옮겨 사용하라.

0개의 댓글