
아래는 「파이썬 코딩의 기술 (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을 사용하라