파이썬 서식 지정자와 f-string의 차이
파이썬 서식 지정자와 f-string의 차이
값을 문장 안에 넣는 방법은 오래된 % 서식, str.format(), f-string이 있습니다. 기존 코드를 읽기 위해 세 방식을 알 필요가 있지만 새 코드에서는 대체로 f-string이 가장 읽기 쉽습니다.
% 서식 지정자
name = "민수"
score = 92
print("%s의 점수는 %d점입니다." % (name, score))| 지정자 | 의미 |
|---|---|
%s | 문자열 형태 |
%d | 정수 |
%f | 실수 |
%% | % 문자 자체 |
자료형과 지정자가 맞지 않으면 오류가 발생할 수 있고 값이 많아질수록 위치를 확인하기 어렵습니다.
format 메서드
message = "{name}의 점수는 {score:.1f}점입니다.".format(
name="민수", score=92.375
)
print(message)이름 있는 자리를 사용할 수 있어 % 방식보다 의미가 분명합니다. 템플릿을 별도로 보관하거나 구버전 파이썬을 다룰 때 볼 수 있습니다.
f-string
name = "민수"
score = 92.375
print(f"{name}의 점수는 {score:.1f}점입니다."):.1f는 소수점 아래 한 자리, :,는 천 단위 구분, :>10은 폭 10의 오른쪽 정렬을 뜻합니다.
price = 1234567
ratio = 0.8732
print(f"가격: {price:,}원")
print(f"달성률: {ratio:.1%}")디버깅할 때 변수명 함께 출력
count = 7
total = 21
print(f"{count=}, {total=}")
# count=7, total=21문자열 포매팅이 보안 처리는 아니다
SQL에 사용자 입력을 f-string으로 결합하면 SQL 삽입 공격 위험이 생깁니다. 쿼리에는 데이터베이스 라이브러리의 매개변수 바인딩을 사용하십시오. HTML도 외부 입력을 넣을 때 템플릿 엔진의 이스케이프 기능이 필요합니다.
정렬과 채우기 결과 비교
value = 42
print(f"|{value:>6}|") # 오른쪽 정렬
print(f"|{value:<6}|") # 왼쪽 정렬
print(f"|{value:^6}|") # 가운데 정렬
print(f"|{value:06d}|") # 0으로 채우기막대 기호를 함께 출력하면 실제 폭을 눈으로 확인하기 쉽습니다. 숫자 보고서와 표를 만들 때 유용하지만 복잡한 표는 전용 라이브러리를 고려하십시오.
연습: 영수증 한 줄 만들기
상품명, 수량, 단가를 변수로 받아 연필 3개 1,500원처럼 열이 맞는 문장을 만들어 보십시오. 총액도 계산하고 잘못된 음수 수량은 거부합니다. 한글 폭은 터미널 글꼴에 따라 정렬이 다르게 보일 수 있다는 점도 확인하세요.
표시용 반올림과 실제 값 구분하기
price = 1234.567
message = f"{price:.2f}"
print(message) # 1234.57
print(type(message)) # <class 'str'>
print(price) # 1234.567서식 지정은 화면에 보이는 문자열만 바꾸며 원래 숫자를 변경하지 않습니다. 계산 단계에서 반올림이 필요하면 round()나 금액 규칙에 맞는 Decimal을 별도로 사용해야 합니다. 표시된 값으로 다시 계산하려고 문자열을 숫자로 되돌리는 방식은 피하십시오.
정리
기존 코드와 로깅에서는 % 방식을 만날 수 있지만, 일반적인 새 코드의 값 표현에는 f-string이 읽기 쉽습니다. 표시 형식과 입력값의 안전한 처리는 별개의 문제라는 점을 기억하십시오.