https://docs.python.org/3/tutorial/inputoutput.html#fancier-output-formatting
정교한 출력 포맷팅
f-string
- 문자열 앞에
f/F, 중괄호에 표현식을 넣어 값/계산 결과 삽입.
f"Result of {year} {event}"str.format()
{}자리표시자에 순서/이름별 값을 전달하고 포맷 지정 가능 (자리 수/부호/소수점/백분율 등 제어)
"{:-9} YES votes {:2.2%}.format(yes_votes,pct)"직접 문자열 조립
str() vs repr()
- str() 사람이 읽기 쉬운 표현 (요약/가독성 중심)
- repr() 은 디버깅,재생성에 유용한 “정확한”표현 (eval(repr(obj)) == obj 가 성립하도록)
- 디버깅/로깅: 값의 정확한 내부 표현이 필요할 때. 예: 개행·탭·따옴표·바이너리 데이터 (‘hi\n’).
- REPL/인터랙티브 환경: 파이썬 쉘은 표현식 결과를 repr로 보여줘서 값 구조를 그대로 확인 가능.
- 재생성/직렬화 친화 표현: 가능하면 eval(repr(obj)) == obj가 성립하도록 만들어 복원성을 높임(숫자, 튜플 등 기본 타입).
- 컨테이너 출력: 리스트/딕셔너리 등은 요소의 repr을 사용하므로 내부 요소를 정확히 드러냄.
- 커스텀 클래스 구현: __repr__을 디버깅 친화적으로 작성해 타입·핵심 필드가 보이게(MyPoint(x=1, y=2));
- f-string에서 !r:
- “value={obj!r}“처럼 로깅 시 가독성과 정확도를 함께 확보.
string.Template
- $name 같은 플레이스 홀더를 딕셔너리 값으로 치환하는 단순 템플릿 방식
import string
tpl = string.Template("$who scored $score")
tpl.substitute({"who":"Alice","score":98})