본문 바로가기

Python

Python - String Formatting

print를 할 때 %, format 또는 f""를 넣어 출력할 문장에 변수를 대입할 수 있다. 이렇게 항상 print와 한 세트로 써서 print를 하는 방법으로 인식하고 있었는데, 정확히는 문자열을 formatting하는 방법이다. 만들어 놓고 print를 안 할 수도 있는 거고.

1. %-formatting

좀 불편해서 잘 안쓰는 데 정리만 해둔다. 문자열 내에 %s(문자), %d(정수), %f(실수) 등을 넣어 변수의 type을 고정해주면서 들어갈 자리를 만들어준다. 문자열 뒤에 %를 넣고 변수를 쓴다.

"Hello, %s." % name

여러개를 줄 땐 아래와 같이 괄호를 쓴다.

"Today is %d/%d, %s." % (month, day, weekday)

2. str.format()

문자열 안에 { }를 넣어 자리를 만들어주고, 문자열 뒤 .format()을 붙인다. { } 안에는 .format() 괄호 속 인자들을 index를 통해 넣을 수 있다. 키워드 인자로 주는 것도 가능하다.

'The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred', other='Georg')

print 결과
The story of Bill, Manfred, and Georg.

여기서 Georg는 other이라는 키워드를 통해 들어갔다.

 

dict를 넣을 땐 좀 번거롭다. 참고 링크 7.1.2 문자열 format() 메서드

table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
'Jack: {0[Jack]:d}, Sjoerd: {0[Sjoerd]:d}, Dcab: {0[Dcab]:d}'.format(table))

print 결과
Jack: 4098, Sjoerd: 4127, Dcab: 8637678

table이 .format() 안에서 index가 0이니까 0[Jack] 이런 식으로 호출한다.

그 뒤에 붙은 :d는 포맷 옵션 type에 decimal을 준 것이다. 참고 링크 포맷 문자열 문법

'Jack: {Jack:d}, Sjoerd: {Sjoerd:d}, Dcab: {Dcab:d}'.format(**table))

이렇게 쓰면 table을 variable length keyword argument(키워드 가변 인자)로 받는다. 결과는 같다. 참고 링크 

3. f-strings

편의상 f어쩌구라고 기억하고 있던 방법. 가장 자주 쓰는 건데 파이썬 3.6부터 나왔단다. 진짜 새 거네.

문자열 따옴표 앞에 f를 붙이고 문자열 안에 { }를 넣어 변수 자리를 만들어준다. 그리고 { } 안에 일반 변수든 dict[index]든 list[index]든 연산식이든 method든 object.keyword든 넣어주면 끝. 정렬 옵션도 가능(참고 링크).

다만 일반 문자열과 마찬가지로 문자열 안팎에 쓰는 따옴표의 종류에 유의하기.

이렇게 { }를 넣는 걸 Literal String Interpolation format이라 한다는 데 여기서 interpolation은 insertion의 의미 같다. 웹스터 링크 기준 3번의 의미로만 알고 있어서 처음엔 뭔소린가 했음..

중간에 줄바꿈이 들어가는 문장을 한 문자열로 만들고 싶다면 문자열 좌우에 쌍따옴표 1개씩이 아니라 3개씩 넣어주면 된다. 참고 링크 multiline f-strings 부분

 

'Python' 카테고리의 다른 글

Python - Tuple  (0) 2021.01.15
Python - List  (0) 2021.01.14
Python - Function Parameters  (0) 2021.01.14
Python - 변수와 기초 연산  (0) 2021.01.13
Python - 입력값 받기  (0) 2020.12.28