한양과학기술고등학교

에듀테크 프로젝트 대시보드

문자열 포매팅 (f-string)

f-string format() format spec :.2f

f"..." 안의 { } 에 파이썬 표현식을 그대로 넣습니다. 가장 권장되는 방식입니다.

1. f-string 기본

name, age = "민수", 17
f"{name}는 {age}살"          # => '민수는 17살'
f"내년엔 {age + 1}살"         # 표현식 OK
f"{name.upper()}"            # 메서드 호출 OK

# = : 디버그 출력 (3.8+) — 변수명과 값 동시에
f"{age = }"                  # => 'age = 17'

# 중괄호 문자는 두 번
f"{{리터럴 중괄호}}"          # => '{리터럴 중괄호}' 

2. 포맷 스펙 미니 언어 {값:스펙}

스펙의미예시
:.2f소수점 2자리 고정f"{3.14159:.2f}" => '3.14'
:,천 단위 콤마f"{1234567:,}" => '1,234,567'
:>10폭 10, 오른쪽 정렬f"{'hi':>10}" => ' hi'
:^10가운데 정렬f"{'hi':^10}"
:08.2f0채움 폭8 소수2f"{3.1:08.2f}" => '00003.10'
:+부호 항상 표시f"{5:+}" => '+5'
:.1%백분율f"{0.25:.1%}" => '25.0%'
:x :b :o16/2/8진수f"{255:x}" => 'ff'
:.3e지수 표기f"{12345:.3e}" => '1.234e+04'

3. 표 출력 예제

rows = [("사과", 3, 1200), ("바나나", 12, 800)]
for name, qty, price in rows:
    print(f"{name:<6}{qty:>4}개 {price * qty:>8,}원")
# 사과       3개    3,600원
# 바나나    12개    9,600원

# 폭을 변수로: 중첩 중괄호
w = 12
f"{'제목':^{w}}"

4. str.format() 와 % (구식)

"{}-{}".format(2024, 1)          # => '2024-1'
"{name}".format(name="kim")      # 이름 지정
"{0}{1}{0}".format("a", "b")     # => 'aba'  (인덱스 재사용)

"%s는 %d살" % ("민수", 17)        # C 스타일 (레거시)
언제 무엇을?
  • 일반적으로 f-string — 가장 빠르고 읽기 쉬움
  • 포맷 문자열을 나중에 채워야 할 때(템플릿, 로깅) str.format() / %
  • logging 은 log.info("%s", x) 형태 권장 (지연 평가)

5. f-string 주의

함정
  • 3.11 이하: f-string 표현식 안에서 바깥과 같은 따옴표·백슬래시 제한 → 3.12부터 완화
  • {} 안에 # 주석 불가
  • 국제화(i18n)가 필요하면 f-string 대신 gettext 템플릿
"지금 하는 것이 아예 안 하는 것보다 낫다 — 다만 '지금 당장'보다는 낫지 않을 때가 많다"