Python string interpolation

minch·2021년 7월 7일
0

Python

목록 보기
3/13
post-thumbnail

String interpolation

String interpolation(문자열 보간)이란?

문자열 데이터에 자리표시자(값을 줄 수 있는 변수)를 삽입하여, 그 데이터를 좀 더 동적으로 표현 할 수 있는 방법이다.

Python에서는 여러 방식이 존재하는데 몇가지 소개하면,

  • % 모듈
  • .format()
  • f-string

이 중에서는 f-string이 가장 편리하고 가독성이 높기 때문에 주로 사용된다.

%(modulo) operator

문자열을 formatting하는 방법들 중에 가장 오래된 것으로,
아래 표에 나온 type들을 정확히 알고 사용하여야 한다는 단점이 존재한다.

EscapeDescription
%d or %i정수(Integer)
%f부동소수(floating-point)
%s문자열(String)
%c문자 1개(character)
%%Literal '%' (문자 '%' 자체)

type들을 정확히 구분시켜주지 않으면 formatting되지 않고 error가 발생한다.

>>> greeting = "Hi, %s. You have $%d." % ("James",'10')
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    greeting = "Hi, %s. You have $%d." % ("James",'10')
TypeError: %d format: a number is required, not str

'10' str type이기 때문에 error 발생

그리고, 문자열이 길어지면 가독성이 매우 떨어지게 된다.

>>> name1 = "James"
>>> bot1 = "Tom"
>>> bot2 = "Jerry"
>>> price1 = 100
>>> price2 = 150
>>> product_intro = "Hello, %s. The name of this bot is %s.
  The price is $%d. Another is %s, $%d." % (name1, bot1, price1,
  bot2, price2)
>>> print(product_intro)
Hello, James. The name of this bot is Tom. The price is $100.
Another is Jerry, $150.

.format() method

이러한 문제점을 해결하기 위해서 python 3.0 이상부터 .format() 방식이 추가 되었는데,

>>> greeting = "Hi, {1}. You have ${0}.".format(10,"James")
>>> print(greeting)
Hi, James. You have $10.

순서를 조정할 수 있고, 조금 더 가독성이 나아진 것을 확인할 수 있다.
또한, Data type을 고려하지 않고 쉽게 나타낼 수 있다!

하지만 긴 문자열을 나타낼 때,

>>> name1 = "James"
>>> bot1 = "Tom"
>>> bot2 = "Jerry"
>>> price1 = 100
>>> price2 = 150
>>> product_intro = "Hello, {name1}. The name of this bot
  is {bot1}. The price is ${price1}. Another is {bot2},
  ${price2}.".format(name1=name1, bot1=bot1, price1=price1,
  bot2=bot2, price2=price2)
>>> print(product_intro)
Hello, James. The name of this bot is Tom. The price is $100.
Another is Jerry, $150.

여전히 한 눈에 알아보기 힘들다는 단점이 존재한다.

f-string formatting

그래서 python 3.6 이후 등장한 것이 f-string을 이용한 포맷팅으로 가독성을 개선하고, 사용하기 매우 편리하다는 장점이 있다! (그리고, 연산 속도 또한 가장 빠르다!)

>>> name1 = "James"
>>> bot1 = "Tom"
>>> bot2 = "Jerry"
>>> price1 = 100
>>> price2 = 150
>>> product_intro = f"Hello, {name1}. The name of this bot
  is {bot1}. The price is ${price1}. Another is {bot2},
  ${price2}."
>>> print(product_intro)
Hello, James. The name of this bot is Tom. The price is $100.
Another is Jerry, $150.

따로 변수를 지정해 줄 필요없이, 문자열 내에서 변수가 작용하는 것이다.

또, 기존에는 할 수 없었던 정수끼리의 산수 연산도 가능하다.

>>> total_price = f"total : {price1 + price2}"
>>> print(total_price)
total : 250

이처럼 string interpolation을 python에서는 다양한 방법으로 지원하는데,
확실히 f-string 포맷팅이 가장 장점이 많고, 보편적으로 쓰이는 이유를 알 수 있었다. 하지만 다른 방법들도 알고 공부를 해야, 기존에 작성되었거나 이전 python version으로 작성된 Code를 이해하는데 도움이 될 것이다.

0개의 댓글