더북(TheBook)

형식화 식에 딕셔너리를 사용하면 여러 형식 지정자에 같은 키를 지정할 수 있어서 같은 값을 반복하지 않아도 되므로 앞에서 설명한 세 번째 문제점도 해결할 수 있다.

name = '철수'
template = '%s는 음식을 좋아해. %s가 요리하는 모습을 봐요.'

before = template % (name, name)  # 튜플
template = '%(name)s는 음식을 좋아해. %(name)s가 요리하는 모습을 봐요.'
after = template % {'name': name} # 딕셔너리

assert before == after

하지만 딕셔너리 형식 문자열을 사용하면 다른 문제가 더 심해지거나 새로운 문제가 생긴다. 앞에서 설명한 두 번째 문제점인 값을 표시하기 전에 살짝 바꿔야 하는 경우, 형식화 연산자인 % 오른편에 딕셔너리 키와 콜론(:) 연산자가 추가됨에 따라 형식화 식이 더 길어지고 시각적으로 잡음이 더 많아진다. 다음 예제에서 이 문제점을 살펴보자. 같은 문자열을 형식화하면서 딕셔너리를 사용할 때와 사용하지 않을 때의 차이를 나타낸 것이다.

for i, (item, count) in enumerate(pantry):
    before = '#%d: %-10s = %d' % (
        i + 1,
        item.title(),
        round(count))

    after = '#%(loop)d: %(item)-10s = %(count)d' % {
        'loop': i + 1,
        'item': item.title(), 
        'count': round(count),
    }

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