Logo

파이썬의 f-string으로 문자열 포맷팅하기

파이썬 3.6에서 소위 f-string이라고 불리는 문자열을 좀 더 쉽게 포맷팅하기 위한 새로운 방법이 추가되었는데요. 이번 포스팅에서는 간결하고 읽기 편한 문법으로 많은 파이썬 개발자들에게 사랑받고 있는 이 f-string에 대해서 살펴보겠습니다.

기본 문법

파이썬에서 문자열은 아시는 것처럼 홈 따옴표나 쌍 따움표를 이용해서 나타내죠?

>>> "나는 문자열입니다."
'나는 문자열입니다.'

이러한 일반적인 문자열 앞에 f 또는 F 문자만 붙여주면 f-string이 됩니다.

>>> f"나는 f-string입니다."
'나는 f-string입니다.'

변수 치환

중괄호(brace)을 사용하면 f-string 안 에 파이썬의 표현식(expression)을 삽입할 수 있는데요.

>>> x = 1
>>> y = 2
>>> f"{x} + {y}{x + y}입니다."
'1 + 2는 3입니다.'

이처럼 문자열 안에 어떤 변수나 표현식을 삽입할 때 f-string의 진가가 발휘되기 시작합니다.

>>> first_name = "John"
>>> last_name = "Doe"
>>> f"Welcome, {first_name} {last_name}!"
'Welcome, John Doe!'

함수 호출

f-string을 사용하면 문자열 안에서 심지어 함수를 호출할 수 있습니다.

>>> word = "Python"
>>> f"{word}{len(word)}글자입니다."
'Python는 6글자입니다.'
>>> f"대문자로는 {word.upper()}이고, 소문자로는 {word.lower()}입니다."
'대문자로는 PYTHON이고, 소문자로는 python입니다.'

다른 표현식

사실 상 f-string을 사용하면 파이썬에서 상상할 수 있는 모든 표현식을 문자열 안에 삽입할 수 있기 때문에 활용도가 무궁무진하다고 볼 수 있습니다.

>>> word = "Python"
>>> f"{word}의 첫 두 글자는 {word[:2]}입니다."
'Python의 첫 두 글자는  Py입니다.'
>>> word = "Python"
>>> f"{word}를 거꾸로 하면 {word[::-1]}입니다."
'Python를 거꾸로 하면 nohtyP입니다.'
>>> f"3회 반복: {','.join([word] * 3)}"
'3회 반복: Python,Python,Python'

객체 치환

f-string 안 에서 객체를 사용하면 해당 객체를 상대로 str() 내장 함수를 호출된 결과가 삽입됩니다.

>>> from datetime import date
>>> f"오늘은 {date.today()}입니다."
'오늘은 2021-02-27입니다.'

str() 내장 함수 대신에 repr() 내장 함수가 호출된 결과를 삽입하고 싶다면 !r을 뒤에 붙여주면 됩니다.

>>> from datetime import date
>>> f"오늘은 {date.today()!r}입니다."
'오늘은 datetime.date(2021, 2, 27)입니다.'

참고로 보통 str() 내장 함수는 사람이 읽기 편한 형태로 객체를 문자열로 변환해주는 반면에, repr() 내장 함수는 디버깅하기 용이한 형태로 객체를 문자열로 변환해줍니다. 따라서 str() 내장 함수의 호출 결과가 디버깅하기에 부족하다면, !r을 활용해서 객체에 대한 좀 더 자세한 정보를 얻을 수 있을 수 있습니다.

디버깅

Python 3.8에서는 f-string을 좀 더 사용하기 편하도록 문법이 개선이 되었는데요.

기존에는 변수명과 변수값을 콘솔에 출력해볼 때, f-string 안 에 변수를 2번 사용했어야 했습니다.

>>> num = 1
>>> print(f"num={num}")
num=1

하지만 이제는 f-string 안 에 변수를 한 번만 사용해도 되기 때문에 디버깅할 때 특히 유용합니다.

>>> num = 1
>>> print(f"{num=}")
num=1

전체코드

본 포스팅에서 제가 작성한 전체 코드는 아래에서 직접 확인하고 실행해보실 수 있습니다.

https://dales.link/vj3

마치면서

지금까지 파이썬의 f-string을 이용해서 어떻게 효과적으로 문자열을 포맷팅할 수 있는지에 대해서 알아보았습니다. 그 동안 문자열 포맷을 위해서 % 연산자나 str.format() 함수만 사용하셨다면 f-string을 한 번 사용해보시기를 추천드리고 싶습니다.