BETTER WAY 5) 복잡한 식을 쓰는 대신 도우미 함수를 작성하라!

C__W.A·2021년 7월 12일
0

이펙티브 파이썬

목록 보기
4/8
post-thumbnail

✅ 파이썬 문법을 사용하면 아주 복잡하고 어려운 한 줄짜리 식을 쉽게 작성할 수 있다.

파이썬은 문법이 간결하므로 상당한 로직이 들어가는 식도 한 줄로 매우 쉽게 작성할 수 있다.

from urllib.parse import parse_qs

my_values = parse_qs("빨강=5&파랑=0&초록=",
		     keep_blank_values=True)

print(repr(my_values)){'빨강':['5'], '파랑':['0'], '초록':['']}

✍🏻parse_qs
parse_qs() 는 지정된 쿼리스트링을 해석하여 dict() 로 반환합니다.

print("빨강", my_vaues.get('빨강'))
print("초록", my_vaues.get('초록'))
print("투명도", my_vaues.get('투명도'))

get 메서드(딕셔너리 key로 value 가져오는 메서드)를 사용하면 상황에 따라 다른 값이 return된다.

이런 경우를 처리하기 위해서 if문 구조로 코드를 작성하거나 도우미 함수를 통해서 처리할 수 있다. 하지마 이런 방식보다는 if 식(expression)을 사용하면 좋다.

red = my_values.get('빨강',[''])[0] or 0
green = my_values.get('초록',[''])[0] or 0
opacity = my_value.get('투명도', [''])[0] or 0

print(f'빨강:{red!r}')
print(f'초록:{green!r}')
print(f'투명도:{opacity!r}')

➜
빨강: '5'
초록: 0
투명도: 0

빈 문자열, 빈 list, 0이 모두 False로 평가 된다는 사실을 이용했다. 첫번째 조건이 0이면 false가 되서 0이 출력된다.

파이썬은 이런식의 문법을 이용해서 한 줄로 축약해서 코드를 만들 수 있다.

✍🏻하지만 이 식은 가독성이 좋지 않다. 원하는 모든 기능을 제공하지 못한다.

✅ 복잡한 식을 도우미 함수로 옮겨라. 특히 같은 로직을 반복해 사용할 때는 도우미 함수를 꼭 사용하라.

자주 사용하는 로직이 있다면 도우미 함수를 작성해서 사용하는게 더 효율적이다. 비록 두세 번 밖에 사용되지 않더라도 반듯이 도우미 함수를 작성해야 한다.

def get_first_int(values, key, defalut=0):
	found = value.get(key, [''])
    if found[0]:
    	return int(found[0])
    return default

✍🏻 식이 복잡해지기 시작하면 바로 식을 더 작은 조각으로 나눠서 로직을 도우미 함수로 옮길지 고려해야 한다.

✅ 불(boolean) 연산자 or나 and를 식에 사용하는 것보다 if/else 식을 쓰는 편이 더 가독성이 좋다.

red = int(my_value.get("빨강",[''])[0] or 0)

이런 식에 코드는 읽기 어렵고, 시각적으로 보기 좋지 않다. 코드를 새로 읽는 사람 입장에서 이 이런식으로 작성된 코드를 읽고 일하기에는 시간적으로 투자를 많이 해야 한다. 코드를 짧게 작성하면서 한줄에 모든 것을 작성하는 노력은 가치가 없다.

✍🏻멋지게 작성하는 것보다 가독성 좋고 이해하기 쉽게 작성하는게 더 가치있다.

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

이런식으로 if/else 문을 사용해서 보다 분명하고 가독성이 좋다.

✍🏻 코드를 줄여 쓰는 것보다 가독성 좋게 하는 것이 더 가치 있다. 복잡한 식을 표현할 수 있는 파이썬의 함축적인 문법이 지저분한 코드를 만들어내지 않도록 하라.

✔Don't Repeat Yourself 반복하지 말라

profile
기술은 문제를 해결하기 위해 존재한다

0개의 댓글