문자열 형식 지정
다음의 객체들을 문자열속에 삽입하여 나타낼 수 있습니다.
num=20220421 name="Kim" name+", 안녕하세요"
'Kim, 안녕하세요'
위 코드는 문자열 연산자인 "+"를 적용한 것입니다. 이와 같이 어떤 객체를 문자열에 삽입하여 나타낼 수 있는 다양한 방법들이 존재합니다. 위 결과와 마찬가지로 다음의 방식들로 생성된 객체 역시 문자열입니다.
printf-style
Python의 문자열에는 %
연산자로 액세스할 수 있는 고유한 내장 연산이 있습니다.
다음 예는 %s
형식 지정자를 사용하여 문자열 객체인 name을 대체할 위치를 Python에 알려줍니다. 이것을 printf-style String Formatting라고 합니다.
'%s, 안녕하세요' % name
'Kim, 안녕하세요'
이 스타일로 하나 이상의 객체들에 접근하기 위해서는 % 연산자의 인수를 튜플 형식으로 전달합니다.
"%s의 등록번호는 %d입니다." % (name, num)
'Kim의 등록번호는 20220421입니다.'
위 코드에서 문자열을 반환하기 위한 형식지정자 %s외에 정수를 나타내기 위해 %d
를 사용하였습니다. 외에 %f, %x
는 각각 부동소수와 16진수 값을 표현 형식을 위한 지정자입니다.
cl="math" avg=75 sd=11.674 "%s의 평균 :%d, 표준편차: %f" %(cl, avg, sd)
'math의 평균 :75, 표준편차: 11.674000'
다음 코드와 같이 부동소수의 경우 소수점이하의 자릿수를 지정하기 위해 %와 f 사이에 .자릿수를 입력합니다.
"%s의 평균 :%d, 표준편차: %.3f" %(cl, avg, sd)
'math의 평균 :75, 표준편차: 11.674'
10진수 값을 16진수로 변환하기 위해 %x 연산자를 적용합니다.
hex(75)
'0x4b'
'%x'%avg
'4b'
위와 같이 값을 전달하는 순서는 형식 문자열에서 값이 참조되는 순서와 일치해야 합니다. 그러나 다음 코드와 같이 각 객체의 인식을 위한 이름이 주어지는 경우는 순서가 무시됩니다.
"%(name)s의 등록번호는 %(num)d입니다." % {"num":num,"name":name}
'Kim의 등록번호는 20220421입니다.'
string.format() 메소드
문자열.format()
메소드를 사용하여 객체를 문자열에 삽입할 수 있습니다. 이 방법은 %
연산자를 적용한 방식과 유사합니다. 즉, 메소드에 전달하는 인수들을 문자열 속에 위치시키는 것으로 문자열 내에 삽입 위치와 인수의 위치는 같아야 합니다. 그러나 인수를 인식자와 함께 전달하는 경우 그 순서는 무시됩니다.
'안녕하세요, {}. 당신의 등록번호는 {}입니다.'.format(name, num)
'안녕하세요, Kim. 당신의 등록번호는 20220421입니다.'
'안녕하세요, {na}. 당신의 등록번호는 {nu}입니다.'.format(nu=num, na=name)
'안녕하세요, Kim. 당신의 등록번호는 20220421입니다.'
가져올 객체의 형식을 지정하기 위해 문자열 내의 각 호출 위치에 형식 지정자를 콜론과 함께 입력합니다. 즉, {: 형식지정자}와 같이 가져올 객체의 형식을 지정합니다.
'안녕하세요, {}. 당신의 등록번호는 {:x}입니다.'.format(name, num)
'안녕하세요, Kim. 당신의 등록번호는 1348a05입니다.'
'안녕하세요, {na}. 당신의 등록번호는 {nu: x}입니다.'.format(nu=num, na=name)
'안녕하세요, Kim. 당신의 등록번호는 1348a05입니다.'
Formatted string literals
문자열 앞에 'f
' 또는 'F
'를 입력하고 문자열 내에 객체의 입력위치에 '{}'를 사용하여 표시합니다. 형식지정자는 대괄호 내에 입력합니다.
이 방식으로 생성된 객체 역시 문자열입니다.
f'안녕하세요, {name}. 당신의 등록번호는 {num}입니다.'
'안녕하세요, Kim. 당신의 등록번호는 20220421입니다.'
F'안녕하세요, {name}. 당신의 등록번호는 {num:x}입니다.'
'안녕하세요, Kim. 당신의 등록번호는 1348a05입니다.'
문자열에 객체를 삽입하는 위 방식들을 사용하여 식(expression)의 직접입력이 가능합니다.
a, b=10, 3 c=f'10과 3의 합은 {a+b}이고 두 수의 차는 {a-b}입니다.' c
'10과 3의 합은 13이고 두 수의 차는 7입니다.'
c1='10과 3의 합은 {%d}이고 두 수의 차는 {%d}입니다.'%(a+b, a-b); c1
'10과 3의 합은 {13}이고 두 수의 차는 {7}입니다.'
c2='10과 3의 합은 {:d}이고 두 수의 차는 {:d}입니다.'.format(a+b, a-b); c2
'10과 3의 합은 13이고 두 수의 차는 7입니다.'
위 결과는 모두 문자열입니다.
type(c), type(c1), type(c2)
(str, str, str)
댓글
댓글 쓰기