1. 표현식 기반 문자열 조합
2. 메소드 기반_format 메소드
1. 표현식 기반 문자열 조합
타입 지시자 | 내용 | 예시 |
%s | '%s' 에 문자열을 넣는다 | s = 'Hello! %s ' % 'World' print(s) #Hello! World |
%d | '%d' 에 정수를 넣는다 | d = 'Score : %d' % 90 print(d) #Score : 90 |
%f | '%f' 에 실술르 넣는다 | f = 'PI is %f' % 3.141 |
* 문자열에 있는 타입지시자에 있는 값들에 대체할 값들을 튜플에 넣어준다. 튜플에 있는 값들이 타입지시자에 순서대로 대입되며 기본적으로 타입지시자의 데이터 타입과 일치해야한다,
* 튜플에 있는 값과 타입지시자의 데이터 타입이 일치하지 않는다면 오류가 발생하지만, 정수 -> 실수, 실수 -> 정수, 정수/실수 -> 문자열. 세가지 경우에는 파이썬이 자동형변환을 시켜준다. 실수 -> 정수 케이스의 경우에는 데이터 손실이 발생한다.
* 튜플 대신 딕셔너리에 대입할 값을 넣는 것도 가능하다. 이때, 데이터는 문자열에서 딕셔너리에 있는 데이터는 '%(key)타입지시자' 의 형태로 불러옴( ex. %(name)s )
# 딕셔너리로 문자열 출력
dict = {'name': 'June', 'score': 100}
print('%(name)s의 점수는 %(score)d' % dict) #June의 점수는 100
세밀한 문자열 조합 지정 % [flags] [width] [.precision]f |
||
flags | 0 #빈 공간에 숫자 0으로 채움 - #왼쪽에 정렬 + #부호가 함께 출력 |
t1 = 'PI : %07.2f' % 3.141 print(t1) #PI : 0003.14 t2 = 'PI : %-7.2f' % 3.141 print(t2) #PI : 3.14 # 결과과 왼쪽 정렬되어있고 뒤에 3자리 빈공간이 확보됨 t3 = 'PI : %+7.2f' % 3.141 print(t3) #PI : +3.14 |
width | 폭, 어느 정도의 넓이를 확보하고 출력할지를 결정 | t1 = 'PI : %05.2f' % 3.141 print(t1) # PI : 03.14 t2 = 'PI : %06.2f' % 3.141 print(t2) # PI : 003.14 t3 = 'PI : %07.2f' % 3.141 print(t3) # PI : 0003.14 |
precision | 정밀도, 소수 이하 몇째 자리까지 출력할지 결정 .자릿수f |
t1 = 'PI : %06.1f' % 3.141 print(t1) # PI : 0003.1 t2 = 'PI : %06.2f' % 3.141 print(t2) # PI : 003.14 t3 = 'PI : %06.3f' % 3.141 print(t3) # PI : 03.141 |
2. 메소드 기반_format 메소드
* format 메소드를 호출 해 문자열에 원하는 값을 대입
* 문자열에 있는 { }에는 format 메소드의 인자를 넘버링한 값(0부터 시작)이 들어갈 수 있고, 이름으로 대체할 수도 있다. 이름으로 대체하는 경우는 아래 예시로 설명을 대체
* format 메소드의 인자를 순서대로 문자열 { } 에 대입하는 경우에는 번호를 부여하지 않아도 된다.
* format 메소드의 인자로 리스트 객체를 '*객체명'으로 전달하면 언패킹이 진행되고 리스트에 있는 값들이 차례대로 문자열 { }에 대입됨.
* format 메소드의 인자로 딕셔너리 객체를 전달할 수도 있음. 이 때, value값을 갖고 오기 위해서는 '{0[key]}.format(obj_dict)' 의 형태를 취함
# 넘버링을 생략
s1 = 'Hi {}, How are u ? this is your {}'
ft = s1.format('June', 'Car')
print(ft) # Hi June, How are u ? this is your Car
# 넘버링을 한 경우
s2 = 'Hi {1}, How are u ? this is your {0}'
ft = s2.format('June', 'Car')
print(ft) # Hi Car, How are u ? this is your June
# 넘버링 대신 이름을 사용
s3 = 'Hi {name}, How are u ? this is your {thing}'
ft = s3.format(name='June', thing='Car')
print(ft) # Hi June, How are u ? this is your Car
# 리스트 언패킹
check_list = ['a', 'b', 'c', 'd']
s1 = 'A : {}, B : {}, C : {}, D : {}'.format(*check_list)
print(s1) # A : a, B : b, C : c, D : d
# 딕셔너리 객체를 인자로 전달
check_dict = {'key_A': 'value_abc', 'key_B': 'value_bcd', 'key_C': 'value_cde', 'key_D': 'value_def'}
s2 = 'value = {0[key_A]}'.format(check_dict)
print(s2) # value = value_abc
세밀한 문자열 조합 지정 { 0:[flags] [width] [.precision]f } |
||
flags | < # 왼쪽으로 붙혀 출력 ^ # 가운데 정렬해 출력 > # 오른쪽으로 정렬해 출력 #0: 와 flags 기호사이에 문자가 존재한다면 빈공간을 해당 문자로 채움 |
s1 = '{0:<6.2f}'.format(3.141) print(s1) #3.14 s2 = '{0:^6.2f}'.format(3.141) print(s2) # 3.14 s3 = '{0:>6.2f}'.format(3.141) print(s3) # 3.14 s4 = '{0:!>6.2f}'.format(3.141) print(s4) #!!3.14 |
width | 폭, 어느 정도의 넓이를 확보하고 출력할지를 결정 | s1 = '{0:4.2f}'.format(3.141) print(s1) #3.14 s2 = '{0:5.2f}'.format(3.141) print(s2) # 3.14 s3 = '{0:6.2f}'.format(3.141) print(s3) # 3.14 |
precision | 정밀도, 소수 이하 몇째 자리까지 출력할지 결정 .자릿수f |
s1 = '{0:.1f}'.format(3.141) print(s1) #3.1 s2 = '{0:.2f}'.format(3.141) print(s2) #3.14 s3 = '{0:.3f}'.format(3.141) print(s3) #3.141 |
'# Programming Language > Python' 카테고리의 다른 글
[Python] 파이썬 정리(10)_상속 (0) | 2021.07.31 |
---|---|
[Python] 파이썬 정리(9)_파이썬에서 클래스와 객체 (0) | 2021.07.31 |
[Python] 파이썬 정리(7)_정렬_sort/sorted/enumerate (0) | 2021.04.26 |
[Python] 파이썬 정리(6)_집합_set/frozenset (0) | 2021.04.16 |
[Python] 파이썬 정리(5)_딕셔너리_딕컴프리헨션/defaultdict/setdefault/OrderedDict/zip 함수 (0) | 2021.04.03 |