[Python] 메소드 기반 문자열 조합

1 분 소요

메소드 기반 문자열 조합

String formatting method calls : ‘{}_{}‘.format(value, value)

>>> '{0}...{1}...{2}'.format('Robot', 125, 'Box')
'Robot...125...Box'
>>> '{2}...{1}...{0}'.format('Robot', 125, 'Box')
'Box...125...Robot'

위 코드와 같이 {0}, {1}, {2}의 순서를 바꿀 수 있다. 그리고 각각을 두번이상 등장시킬 수 있다.

>>> '{}...{}...{}'.format('Robot', 125, 'Box')
'Robot...125...Box'

만약에 format메소드에 전달되는 값들을 순서대로 출력하는 경우라면 중괄호 안에 숫자를 생략해도 된다.

>>> '{toy}...{num}...{item}'.format(toy='Robot', num=125, item='Box')
'Robot...125...Box'

위 코드처럼 이름으로 대체할 대상을 지정하는 방식이 있다.



인덱싱 연산 추가

>>> my = ['Robot', 125, 'Box']
>>> '{0}...{1}...{2}'.format(*my)
'Robot...125...Box'

위 코드에서 ‘{0}…{1}…{2}’.format(my[0], my[1], my[2])와 같다. 인자 전달 과정에서 리스트 대상으로 언패킹한 예시이다.

>>> my = ['Box', (24,31)]
>>> '{0[0]}...{0[1]}...{1[0]}...{1[1]}'.format(*my)
'B..o..24..31'
>>> d = {'toy':'Robot', 'price':3500}
>>> 'toy = {0[toy]}, price = {0[price]}'.format(d)
'toy = Robot, price = 3500'

문자열 조합, 딕셔너리 기반의 인덱싱 연산을 통해서 문자열을 조합할 수 있다.



보다 세밀한 문자열 구성

%[flags][width][.precision]f

표현식 기반 문자열 조합에서와 같이 위 패턴을 메소드 호출방식에서 이용 가능하다.

>>> '{0}'format(3.14)
'3.14'
>>> '{0:f}'.format(3.14) # 실수라고 직접 지정하면 정밀도가 소수 이하 6자리로 설정됨
'3.140000'
>>> '{0:d}'.format(3)
'3'
>>> '{0:.4f}'.format(3.14)
'3.1400'
>>> '{0:9.4f}'.format(3.14)
'    3.1400'
>>> '{0:<10.4f}'.format(3.14)
'3.1400    '
>>> '{0:>10.4f}'.format(3.14)
'    3.1400'
>>> '{0:^10.4f}'.format(3.14)
'  3.1400  '
>>> '{0:+d}, {1:+d}'.format(5,-5)
'+5, -5'
>>> # '{0:+}, {1:+}'.format(5,-5)  -> 위의 코드와 같음
>>> # '{:+}, {:+}'.format(5,-5)    -> 위의 코드와 같음
>>>
>>> '{0:*^10.4f}'.format(3.14)
'**3.1400**'
>>> '{0:+<10}'.format(7)
'7+++++++++'
>>> '{0:^^10}'.format('hi')
'^^^^hi^^^^'
>>> # 위 세 코드에서 0 생략 가능