아래는 「파이썬 코딩의 기술 (Effective Python)」 2판의 아이템 4 내용을 코드와 함께 정리 + 예제 분석한 것입니다.
파이썬에는 3가지 주요 문자열 포맷팅 방식이 있다.
%
연산자)str.format
메서드이 중 f-문자열은 다음 장점을 가진다.
{}
안에 바로 넣을 수 있음%
와 format()
보다 빠름!r
, !s
, !a
)까지 가능:.2f
, :<10
, :{변수}f
등 직관적%
연산자)a = 0b10111011
b = 0xc5f
print('이진수: %d, 십육진수: %d' % (a, b))
%d
, %s
, %.2f
등 C 언어 스타일 형식을 그대로 사용.key = 'my_var'
value = 1.234
formatted = '%-10s = %.2f' % (key, value)
print(formatted) # my_var = 1.23
%
포맷에서는 위치 인자를 잘못 넣으면 TypeError 발생.'%(key)s'
)으로 개선 가능하지만 여전히 복잡.old_way = '%-10s = %.2f' % (key, value)
new_way = '%(key)-10s = %(value).2f' % {'key': key, 'value': value}
str.format
메서드formatted = '{:<10} = {:.2f}'.format(key, value)
print(formatted) # my_var = 1.23
{1} = {0}
도 가능.formatted = '{1} = {0}'.format(key, value)
print(formatted) # 1.234 = my_var
formatted = f'{key:<10} = {value:.2f}'
print(formatted) # my_var = 1.23
{}
안에 변수, 연산, 함수 호출, 포맷 지정 모두 가능.places = 3
number = 1.23456
print(f'내가 고른 숫자는 {number:.{places}f}') # 내가 고른 숫자는 1.235
%
, format
비교key = 'my_var'
value = 1.234
c_tuple = '%-10s = %.2f' % (key, value)
str_args = '{:<10} = {:.2f}'.format(key, value)
str_kw = '{key:<10} = {value:.2f}'.format(key=key, value=value)
f_string = f'{key:<10} = {value:.2f}'
assert c_tuple == str_args == str_kw == f_string
for i, (item, count) in enumerate(pantry):
old_style = '#%d: %-10s = %d' % (i + 1, item.title(), round(count))
str.format
방식for i, (item, count) in enumerate(pantry):
new_style = '#{}: {:<10s} = {}'.format(i + 1, item.title(), round(count))
for i, (item, count) in enumerate(pantry):
f_string = f'#{i+1}: {item.title():<10s} = {round(count)}'
방식 | 장점 | 단점 |
---|---|---|
C 스타일 % | 간단한 경우는 빠름 | 가독성 낮음, TypeError 발생 쉬움 |
str.format | 명시적 키워드, 다양한 기능 | 문법이 장황함 |
f-string (추천) | 가독성 최고, 표현식 지원, 성능 우수 | 파이썬 3.6 이상 필요 |
C 스타일(%
) 은 낡은 방식 → 유지보수 어려움.
str.format
은 강력하지만 장황.
✅ f-string을 사용하라