파이썬에서 텍스트를 포맷팅 하는 방법이 여러가지가 있다. 대표적으로 string.format()을 들 수 있다. format의 인자가 문자열의 {}을 치환하여 들어가는 식이다.

>>> 'hello {}!!'.format('world')
'hello world!!'

여기서는 텍스트를 포맷팅하는 방법인 f-strings에 대해서 한번 정리해 보자. 참고로 이 내용은 PEP 498에 정리되어 있다.

기본 예제

f-strings의 사용법은 간단하다.

>>> a = 'world'
>>> f'hello {world}!!'
'hello world!!'

문자열 안에 변수를 바로 표기하여 가독성을 올리겠다는 의도로 봐도 되겠다. format의 경우 변수의 순서와 {}를 매칭하여 확인하여야 하기 때문이다.

다른 스트링 포맷팅과의 비교

가장 대표적으로 사용할 수 있는 파이썬의 스트링 포맷핑은 %를 사용하는 방식이다. 이런 식으로 사용한다.

>>> 'hello %s!!' % 'world'
'hello world!!'

이 텍스트 포맷팅의 약점은 오직 int, str, double만 포맷팅할 수 있다는 것이다. 예를 들어 한 개의 튜플을 보내는 경우 에러가 발생한다.

>>> 'hello %s' % ('world', '!!')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

string.format()은 이런 문제를 해결하여 다음과 같이 출력한다.

>>> 'hello {}'.format(('world', '!!'))
"hello ('world', '!!')"

string.format()은 마치 함수를 호출하는 방식의 문법을 사용하며, 따라서 여러 문자열 또한 포맷팅하는 것이 가능하다. 다만 이 방식도 결국은 반복되는 코드가 많다는 문제가 있다.

f-strings의 문법

f-strings는 굉장히 직관적이고 가독성이 좋은 스트링 포맷팅을 제공한다. 또한 다른 스트링 포맷팅과 마찬가지로 다양한 문법을 제공하므로 알아두면 여러모로 도움이 될 것 같다.

여기서는 쓸만한 것들 몇 개만 빨리 보고, 나머지는 PEP 498을 직접 참고해 보자.

이스케이프

quote는 \로 이스케이프가 가능하다. 하지만 {}로 이스케이프가 불가능하고, 두 번을 써서 이스케이프한다. 아래와 같다.

>>> f'\'a\''
"'a'"
>>> f'\{a\}'
  File "<stdin>", line 1
SyntaxError: f-string expression part cannot include a backslash
>>> f'{{a}}'
'{a}'

특수 기호를 사용한 텍스트 포맷팅

텍스트 포맷팅에 사용하는 특수 기호들은 PEP 3101의 규칙을 따라간다. 그래서 다음과 같은 것을 기존의 format과 마찬가지로 똑같이 사용할 수 있다.

>>> f'{"o":^5}'
'  o  '
>>> f'{"o":>5}'
'    o'