
Percent formatting
- Old Style String Formatting이라고도 불림.
- 파이썬에서 string 내에 variable의 값을 삽입하기 위해
%연산자를 사용하는 방식. C언어에서와 매우 유사하기 때문에 "printf-style formatting"이라고도 불림.
Python 2.x 대의 주요 string formatting 방법이었으나,
오늘날에는 str의 .format() 메서드나 f-string이 보다 권장됨.
과거의 레거시 코드에서 많이 보이므로 사용법을 알고는 있어야 함.
관련 gist
https://gist.github.com/dsaint31x/a999f4c710d79c9d736f02d4b175c140
py_percent_formatting.ipynb
py_percent_formatting.ipynb. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
기본 문법
문자열 안에 format specifier 를 넣고,
string 뒤에 % 연산자를 사용하여 삽입할 값을 전달 (tuple이용):
"string %format_specifier0 %format_specifier1" % (값1, 값2)
Simple Example:
name = "Alice"
age = 30
height = 1.75
# 단일 값
message1 = "My name is %s." % name
print(message1) # 출력: My name is Alice.
# 여러 값 (튜플로 묶어서 전달)
message2 = "My name is %s and I am %d years old." % (name, age)
print(message2) # 출력: My name is Alice and I am 30 years old.
# 다른 타입의 값
message3 = "My height is %.2f meters." % height
print(message3) # 출력: My height is 1.75 meters.
s,d,f를 conversion specifier라고도 부름.- format specifier는 conversion specifier에 format flag, width, precision 을 합친 것을 가리킴.
주요 Conversion Specifiers
각 포맷 지정자는 삽입될 value의 데이터 타입을 지정함.
실제로 어떤 형식의 문자열로 변환하여 출력될지를 결정해서 conversion specifier라고도 불림.
%s: string (문자열)- 어떤 데이터 타입이든
str객체로 변환하여 삽입. - 가장 유연하게 사용됨.
- 어떤 데이터 타입이든
%d: decimal integer (정수)- 정수 값을 삽입.
- int() 생성자의 인자로 넘겨져서 문제 없는 경우만 가능함.
%f: float (부동소수점)- 기본적으로 6자리 소수점까지 표시.
- float() 생성자의 인자로 넘겨져서 문제 없는 경우만 가능함.
%.Nf: 소수점 이하N자리까지 표시- 예:
%.2f는 소수점 둘째 자리까지
%X또는%x: hexadecimal (16진수)- 대소문자 16진수로 변환하여 삽입
- 정수(int)만 가능: float도 동작 안함.
%o: octal (8진수)- 정수를 8진수로 변환하여 삽입.
- 정수(int)만 가능: float도 동작 안함.
%c: 문자 (character)- 하나의 문자를 삽입.
- 정수(ASCII 값, 정확히는 Unicode code point)나 길이가 1인 문자열.
- 예를 들어, 9730 이면 우산 모양 글자.
%e또는%E: 지수 표기법 (exponential notation)- 부동 소수점을 지수 형태로 표시 (예:
1.23e+02).
- 부동 소수점을 지수 형태로 표시 (예:
Format Flags 및 Width/Precision
conversion specifier 앞에 추가적인 format flag나 숫자를 사용하여 출력방식을 제어.
문법:
%[format_flag][width][.precision]coversion_specifier
- format flags:
- 지정하지 않은 경우, width를 채우기 위해 공백문자로 채우며 오른 정렬.
+: 음수에 - 부호가 붙듯이 양수에도 + 부호가 붙게 됨.- 예:
%+d #+10
- 예:
-: 왼쪽 정렬. (기본은 오른쪽 정렬임. 주의할 것)0: 숫자를0으로 채움 - modulo를 이용하는 이 방식에서 공백문자를 제외한 유일한 padding character- width와 숫자에 해당하는 conversion specifier와 함께 사용:
s와는 같이 사용 못함. - 예:
%05d # 00010
- width와 숫자에 해당하는 conversion specifier와 함께 사용:
#:- 8진수/16진수에
0o/0x/0Xprefix가 붙음.
- 8진수/16진수에
- width (폭):
- 최소 필드 폭을 지정함.
- 값이 지정된 폭보다 작으면 공백문자(또는
0)으로 채워짐.
- precision (정밀도):
%f의 경우엔 소수점 이하 자리수를 지정에.%s의 경우엔 출력할 문자열의 최대 필드 폭을 지정.
Example :
value = 123
# 최소 폭 지정 (오른쪽 정렬)
print("Value: %5d" % value) # 출력: Value: 123 (앞에 2칸 공백)
# 0으로 채우기
print("Value: %05d" % value) # 출력: Value: 00123
# 왼쪽 정렬
print("Value: %-5d" % value) # 출력: Value: 123 (뒤에 2칸 공백)
# 부동 소수점 정밀도
pi = 3.14159265
print("Pi: %.2f" % pi) # 출력: Pi: 3.14
print("Pi: %10.3f" % pi) # 출력: Pi: 3.142 (총 10칸, 소수점 3자리)
# 문자열 정밀도 (최대 길이)
text = "Hello World"
print("%.5s" % text) # 출력: Hello
Dictionary를 사용한 포맷팅
key-value pair를 사용하여 보다 가독성 있는 코드 작성이 가능함: 오히려 번잡하다고 느끼는 프로그래머도 많고 실제로 많이 사용 안 됨.
- %와 format specifier 사이에
(key)를 추가 - 값을
dict객체로 전달. (key)는%뒤에 놓이며, 이후 format flag 와 width, precision, conversion specifier 가 놓임.
data = {'name': 'Charlie', 'age': 40}
message = "My name is %(name)s and I am %(age)d years old." % data
print(message)
# 출력: My name is Charlie and I am 40 years old.
format 을 변경하는 경우는 다음을 참고
data = {'name': 'Charlie', 'age': 40}
message = "My name is [%(name)-10s] and I am %(age)03d years old." % data
print(message)
# 출력: My name is [Charlie ] and I am 040 years old.
결론
Legacy code에서 가장 많이 쓰이는 형태이며, C 스타일과 같아서 C언어 등에 익숙한 개발자에게 매우 친숙한 방식임.
C/C++ 에 익숙치 않은 프로그래머들에게는 가독성이 떨어짐.
특히, 다른 방식들에 비해 복잡한 포맷팅에서 객관적으로 가독성이 높다고 보기 어려움.
실제로 f-string 에 비해 가독성이나 기능성이 높다고 보긴 어렵기 때문에 신규 코드에서는 f-string을 보다 사용하는 것이 권장됨.
같이 보면 좋은 자료들
2024.09.04 - [Python] - [Py] Python에서 string formatting.
[Py] Python에서 string formatting.
Python에서 문자열에서 변수의 값을 출력하는 방법(string formatting)에는다음과 같은 세 가지 주요 방법이 있음:% 포맷팅 (%-formatting):공식 명칭: Percent formatting도입 버전: Python 초기 버전부터 사용 가
ds31x.tistory.com
https://dsaint31.tistory.com/532
[Python] f-String
Python : f-StringPython 3.6 이후 도입됨.기존의 중괄호 {}과 format 메소드를 사용하여 문자열 포매팅을 설정하는 방식(Python 2.6 이후)과 유사하지만, 더 직관적으로 문자열을 포맷팅할 수 있는 기능으로
dsaint31.tistory.com
'Python' 카테고리의 다른 글
| urllib.parse.quote, urllib.parse.urlencode (3) | 2025.08.06 |
|---|---|
| str.format() 메서드 - string formatting (2) | 2025.08.01 |
| list의 sort() 메서드 와 sorted() 내장 함수 (3) | 2025.07.30 |
| Compound Statement란? (3) | 2025.07.27 |
| Magic commands-Jupyter NoteBook&IPython (1) | 2025.07.24 |