String interpolation(문자열 보간)이란?
문자열 데이터에 자리표시자(값을 줄 수 있는 변수)를 삽입하여, 그 데이터를 좀 더 동적으로 표현 할 수 있는 방법이다.
Python
에서는 여러 방식이 존재하는데 몇가지 소개하면,
- % 모듈
- .format()
- f-string
이 중에서는 f-string이 가장 편리하고 가독성이 높기 때문에 주로 사용된다.
문자열을 formatting하는 방법들 중에 가장 오래된 것으로,
아래 표에 나온 type들을 정확히 알고 사용하여야 한다는 단점이 존재한다.
Escape | Description |
---|---|
%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.
이러한 문제점을 해결하기 위해서 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.
여전히 한 눈에 알아보기 힘들다는 단점이 존재한다.
그래서 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를 이해하는데 도움이 될 것이다.