본문 바로가기

나의 백과사전

문자열 삽입 기법 (string interpolation)

문자열 삽입은 증가 대입 연산자(Augmented Assignment Operater)처럼 일종의 지름길, 즉 편리한 방법이다.

보통 다른 문자열 안에 또 다른 문자열 값을 사용하려면 + 연산자를 쓴다.


1
2
3
4
5
6
7
>>> name = 'Alice'
>>> event = 'party'
>>> where = 'the pool'
>>> day = 'Saturday'
>>> time = '6:00pm'
>>> print('Hello, ' + name + '. Will you go to the ' + event + ' at ' + where + 'this ' + day + ' at ' + time +'?')
Hello, Alice. Will you go to the party at the poolthis Saturday at 6:00pm?


하지만 위에서처럼 여러 개의 문자열을 일일이 연결하기는 결코 쉬운 일이 아니다.

대신 문자열 삽입(string interpolation)을 쓰면 표시자 (placeholder, 마커) %s (이 표시자는 변환 지시자(conversion specifier)라고 한다)를 쓰고

끝에 변수 이름을 쓴다. 각 %s는 끝에 쓴 변수의 값으로 대치된다.

예를 들어 위 코드는 아래처럼 바꿔 쓸 수 있다.


1
2
3
4
5
6
7
>>> name = 'Alice'
>>> event = 'party'
>>> where = 'the pool'
>>> day = 'Saturday'
>>> time = '6:00pm'
>>> print('Hello %s. Will you go to the %s at %s this %s at %s?' %(name, event, where, day, time))
Hello Alice. Will you go to the party at the pool this Saturday at 6:00pm?

문자열 삽입을 쓰면 + 를 여러 번 쓰는 것보다 코드를 읽고 쓰기 더 쉬워진다.

마지막으로 print()는 % 다음에 변수 이름을 괄호를 쳐서 붙였다.

첫 번째 변수 이름은 첫 번째 %s를 의미하고, 두 번째 변수 이름은 두 번째 %s를 의미한다.


파이썬과 같은 일부 프로그래밍 언어는 %s의 개수와 변수의 개수가 일치하지 않으면 에러를 발생시킨다.


문자열 삽일을 쓰면 문자열이 아니라 데이터 타입을 사용할 수도 있다.

모든 값은 자동으로 문자열 데이터 타입으로 바뀐다 (%s에서 s는 string(문자열)을 의미한다).

+ 연산자를 써서 문자열을 붙일 때는 오직 문자열에서만 쓸 수 잇는데 spam은 정수이므로 에러가 발생한다.

따라서 str(spam)을 써서 문자열로 바꿀 수도 잇지만 문자열 삽입을 쓰면 데이터 타입을 아무거나 사용해도 된다.


1
2
3
4
5
6
>>> spam = 42
>>> print('Spam == ' + spam)
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    print('Spam == ' + spam)
TypeError: Can't convert 'int' object to str implicitly


1
2
3
>>> spam = 42
>>> print('Spam == %s' %(spam))
Spam == 42


문자열 삽입을 쓰면 훨씬 더 쉽고 데이터 타입에 대해 염려할 필요도 없다.

또 print() 함수에서 사용하는 문자열 말고 다른 문자열에서도 쓸 수 있다.

문자열 삽입은 문자열 포멧 (string formatting) 이라고도 한다.



placeholder: 빠져 있는 것을 대신하는 기호나 텍스트의 일부