문자열 삽입은 증가 대입 연산자(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: 빠져 있는 것을 대신하는 기호나 텍스트의 일부
'나의 백과사전' 카테고리의 다른 글
데이터 중심 설계 (Data Driven Design) (0) | 2014.09.27 |
---|---|
카르테시안 좌표계 (Cartesian Coordinates) (0) | 2014.09.27 |
증가 대입 연산자 (Augmented Assignment Operators) (0) | 2014.09.26 |
날코딩 (0) | 2014.09.26 |
하드 코딩 (Hard - coding) (0) | 2014.09.26 |