더북(TheBook)

‘초록’인 경우 my_values 딕셔너리 안에 키에 해당하는 값으로 list가 있기 때문에 작동한다. list에는 빈 문자열이 유일한 원소로 들어 있는데, 빈 문자열은 암묵적으로 False로 평가되고, 그에 따라 전체 식은 0으로 평가된다.

‘투명도’인 경우는 my_values 딕셔너리 안에 키에 해당하는 값이 없으므로 작동한다. get 메서드는 딕셔너리 안에 키가 없을 때 두 번째 인자를 반환한다(Better way 16: ‘in을 사용하고 딕셔너리 키가 없을 때 KeyError를 처리하기보다는 get을 사용하라’ 참고). 여기서 디폴트 값은 빈 문자열이 유일한 원소로 있는 list다. 딕셔너리에서 ‘투명도’를 찾지 못하면 이 코드는 ‘초록’인 경우와 똑같은 일을 한다.

하지만 이 식은 읽기 어려운 데다 우리가 원하는 모든 기능을 제공하지도 못한다. 우리는 모든 파라미터 값을 정수로 변환해서 즉시 수식에 활용하길 바란다. 그렇게 하려면 각 식을 int 내장 함수로 감싸서 문자열을 정수로 구문 분석해야 한다.

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

현재 이 코드는 너무 읽기 어렵고, 시각적 잡음이 많다. 즉, 코드를 이해하기 쉽지 않으므로, 코드를 새로 읽는 사람이 이 식이 실제로 어떤 일을 하는지 이해하기 위해 너무 많은 시간을 투자해야 한다. 코드를 짧게 유지하면 멋지기는 하지만, 모든 내용을 한 줄에 우겨 넣기 위해 노력할 만큼의 가치는 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.