아쉽지만 새로운 format 메서드도 앞에서 설명한 두 번째 문제점은 해결하지 못한다. 따라서 형식화를 하기 전에 값을 조금 변경해야 하는 경우에는 코드 읽기가 어려워진다. C 스타일 형식화와 새로운 형식화는 가독성 면에서 거의 차이가 없으며, 둘 다 읽기에 좋지 않다.
for i, (item, count) in enumerate(pantry): old_style = '#%d: %-10s = %d' % ( i + 1, item.title(), round(count)) new_style = '#{}: {:<10s} = {}'.format( i + 1, item.title(), round(count)) assert old_style == new_style
str.format과 함께 사용하는 형식 지정자에는 딕셔너리 키나 리스트 인덱스를 조합해 위치 지정자에 사용하거나 값을 유니코드나 repr 문자열로 변환하는 등의 고급 옵션이 있다.
formatted = '첫 번째 글자는 {menu[oyster][0]!r}'.format(menu=menu) print(formatted) >>> 첫 번째 글자는 't'