파이썬은 문법이 간결하므로 상당한 로직이 들어가는 식도 한 줄로 매우 쉽게 작성할 수있다.
하지만 긴 로직을 한 줄로 작성할 경우 가독성에 문제가 생긴다. 너무 읽기 어렵고 시각적 잡음이 생긴다. 즉 코드를 이해하기 쉽지 않으므로, 코드를 새로 읽는 사람이 이 코드가 실제로 어떤 일을 하는지 파악하는데 많은 시간이 필요하다.
# my_value 에 빨강이라는 key가 존재할경우 value를 반환, 없을경우 0을 반환
red = int(my_value.get('빨강',[''])[0] or 0)
파이썬에서 코드를 간결하게 유지하면서 이련 경우를 명확하게 표현할 수 있는 if/else 조건식(또는 삼항 조건식)이 있다.
red_str = my_value,get('빨강', [''])
red = int(red_str[0]) if red_str[0] else 0
이 코드는 덜 복합한 경우라면 if/else 조건식이 코드를 아주 명확하게 해줄 것 이다. 하지만 앞의 에제는 다음과 같이 여러 줄로 나눠쓴 완전한 if/ else 문 보다는 아직 덜 명확하다.
green_str = my_value.get('초록', [''])
if green_str[0]:
green = int(green_str[0])
else:
green = 0
이 로직을 반복 적용하려면 ( 단지 두 세번에 불과할 지라도) 도우미 함수를 작성해야한다.
def get_first_int(Value, key, default = 0):
found = value.get(key, [''])
if found[0]:
return int(found[0])
return default
green = get_first_int(my_values, '초록')
도우미 함수 호출을 사용해 작성한 코드는 앞에서 본 복작한 버전이나 두줄 짜리 if/else보다 훨씬 명확하다.
식이 복잡해지기 시작하면 바로 식을 더 작은 조각으로 나눠서 로직을 도우미 함수로 옮길지 고려해야 한다.
파이썬에서 함축적인 문법이 이런 지저분한 코드를 만들어내지 않도록 하라 반복하지 마라 (Don’t Repeat Yourself’)는 뜻의 DRY원칙을 따르라.
Reference. Effective Python