Effective Python C1. Pythonic(5) - 복잡한 식을 쓰는 대신 도우미 함수를 작성하라

2 분 소요

Introduction

다른 언어와 달리 파이썬은 문법이 간결하고, 복잡한 로직도 한 줄로 작성할 수 있는 함축적인 표현식을 제공한다. 문제는 함축적인 표현이 반드시 좋지는 않다. 잦은 협업을 해야한다면 코드를 줄여쓰는 것보다 가독성을 좋게 하는 것이 가치있다.

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

도우미 함수 없이 코드 작성

아래처럼, URL의 질의 문자열을 구문 분석해 파라미터 값을 얻되, 기본값은 0으로 가져가는 코드를 짠다고 해보자.

from urllib.parse import parse_qs
my_values = parse_qs('빨강=5&파랑=0&초록=', keep_blank_values=True)
print(repr(my_values))
>>>
{'빨강': ['5'], '파랑': ['0'], '초록': ['']}

# 값 획득
red = int(my_values.get('빨강', [''])[0] or 0)
  • get 메소드는 딕셔너리 안에 키가 없을 때 두 번째 인자를 반환한다.
  • or 논리 연산자는 첫 번째 값이 참이면 첫 번째 값을 출력하고, 거짓이면 두 번째 값을 출력한다.

값을 획득하는 코드는 한 줄로 표현이 가능하지만 읽기가 어렵다. 아래와 같이 if/else 문을 이용해 풀어쓸 수 있다.

red_str = my_values.get('초록', [''])
if red_str[0]:
    red = int(red_str[0])
else:
    red = 0

도우미 함수를 이용한 코드 작성

그러나 이런 로직을 반복 적용해야 한다면 아래 도우미 함수를 사용할 수 있다.

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

red = get_first_int(my_values, '초록')

식이 좀 복잡해지기 시작한다면 식을 더 작은 로직으로 나누어 도우미 함수로 사용할지 생각해야 한다.

Discussion

다른 언어보다 파이썬은 간결한 표현식에 취해 모든 코드를 최대한 압축적으로 표현하려고 하는 경향이 있었다. 하지만 무조건 짧게 표현하는 것보단, 상대방이 보기에도 이해하기 편한 가독성있는 코드가 더 좋은 코드임을 명심하자.

Summary

  • 같은 로직을 반복해 사용할 때는 도우미 함수를 사용하라. 반복하지 말라.(Don’t Repeat Yourself)
  • 복잡한 식은 더 작은 조각으로 나누되, 도우미 함수로 조각 로직을 옮긴다.
  • 불 연산자인 or이나 and를 식에 사용하는 것보다 if/else 식을 쓰는 편이 더 가독성이 좋다.

Reference

파이썬 코딩의 기술 제 2판. - 브렛 슬리킨 지음 / 오현석 옮김