문자열 포맷팅,
formating = '포맷팅'
print("%% operator %s" % formating) # 포맷팅 방법 1 (%% operator)
print("str.format {f}".format(f=formating)) # 포맷팅 방법 2 (str.format)
print(f"f-string {formating}") # 포맷팅 방법 3 (f-string)
문자열내에서 값을 삽입하는 것을 포맷팅(formating)이라고 합니다.
c언어와 비교하자면, printf()함수에서 형식문자(%~)로 변수의 값을 출력되는 문자열에 추가하듯이, 파이썬에서도 문자열상에서 포맷팅을 이용해, 다른 변수의 값을 추가할 수 있습니다.
(물론 +(문자열 결합)을 사용해서도 문자열끼리 결합할 수 있지만, 포맷팅은 다른 자료형까지도 결합할 수 있습니다)
포맷팅에 방식에는 크게 3가지가 있습니다.
각각, 오래된 (버전 3.0 이전) 방식의 % operator,
파이썬3 이후 (버전 3.0부터) 방식의 str.format,
새로운 (버전 3.6 이상) 방식의 f-string 입니다.
이들의 공통점으로 포맷팅에는 %또는 {}를 사용하는데, (%는 % operator, {}는 str.format, f-string)
포맷팅을 하는 문자열안에 %, {}를 넣고 싶으면,
%를 쓰는 포맷팅에선, %을 %%로,
{}를 쓰는 포맷팅에선, {}을 각각 {{, }}으로 해주어야합니다.
(그렇지 않으면 특수기호가 아니라 포맷팅 기호로 인식하게 됩니다.)
% operator
test1 = '\n%s 버전' % '% operator'
print(test1)
time = '%s %d. %d. %d.' % ('현재시간 :', 2020, 1, 26)
print(time)
파이썬의 오래된 포맷팅 방식으로 C언어의 형식문자와 비슷한 방법입니다,
포맷팅하는 문자열안에 %~로 자료형에 맞는 형식문자를 써주고,
문자열 뒤에 % 를 붙여, 뒤에 형식문자와 매칭되는 값이나 변수를 쓰면 됩니다.
형식문자에 매칭되는 값이나 변수가 여러개일 경우에 괄호()로 묶어주며, 여러개의 값들은 순서대로 하나씩 매칭됩니다.
단점으로는 자료형에 맞지않는 형식문자를 쓰면 에러가나고, 형식문자가 많아질수록 가독성이 떨어지는 점이 있습니다.
print("나는 %s이고, %d살 이며, %s에서 산다. 내 꿈은 %s이며, %d까지 %s하는 것이 목표다. % (name, age, location, dream, time, todo)
str.format
test2 = '\n{} 버전'.format('str.format')
print(test2)
print('나는 {1}, {0}'.format('아무생각이 없기 때문이다.', '아무생각이 없다.')) # 1. 인덱스 번호 매칭
test3 = '이름, {name}: {age}, {location}출신'
print(test3.format(name='누구누구', age='18살', location='대전'))
# 2. 값(누구누구, 18살, 대전)과 연결되는 키(name, age, location)로 매칭
dic = {'name': '아몰랑', 'age': '17살', 'location': '세종'} # 3. 아에 딕셔너리 구조로 짠다음,
print(test3.format(**dic)) # .format()함수에 넣어서 매칭
3.0부터의 새로운 포맷팅 방식으로, 예전 방식대신, 이 포맷팅 방식을 공식문서에서도 권장합니다.
%~대신에 {~}가 사용되고, % (...) 대신에 .format(...)가 사용됩니다.
.format() 함수를 포맷팅에 사용함으로 예전방식보다 다양한 포맷팅이 가능해 졌는데요,
포맷팅에서의 쓰는 값이 여러개일 경우 3가지 매칭방법이 있는데,
1. 값이 적혀있는 순서(인덱스번호)대로
(0, 1, 2)와 같이 format()함수에 있는 값의 순서대로 인덱스 번호를 {}안에 사용해 넣을값을 순서대로 매칭시킬 수 있고,
2. 값과 연결되는 키값으로
넣을 값에 대한 키를 딕셔너리 구조(키:값, 자세한 건 딕셔너리자료형에서 배웁니다)로 짝을 맞추어 넣을값은 .format()함수에, 키를 {}안에 사용해 매칭시킬 수 있습니다.
3. 딕셔너리변수로
넣을값과 키를 하나로 묶어서 딕셔너리변수로 만든다음, .format()함수안에 넣어줘도 됩니다.
대신 인자값인 딕셔너리변수앞에 **를 붙여주어야 합니다.
f-string
new = 'f-string'
print(f"\n{new} 버전")
zom = '좀'
test4 = f'제발 {zom} 코딩 할때 {zom} 이상한 에러뜨지마라 {zom}'
print(test4)
num = 1
print(f"이것도 된다. {num}, {num + num}, {num + 2}")
li1 = ['나는', '너는']
dic2 = {"me": '행복하다.', 'you': '행복하니?'}
print(f"{li1[0]} {dic2['me']} {li1[1]} {dic2['you']}")
3.6이상 버전에서 사용할 수 있는 포맷팅 방식으로, 굴러다니는 변수나 값들을 .format()없이 삽입할 수 있습니다.
간단하게 문자열의 {}안에 대입할 변수나 값을 넣어주면 됩니다. (코드 위에 선언되있기만 하면 무엇이든 사용가능 합니다. 다음에 나오는 리스트나 딕셔너리같은 여러 요소들을 가지는 자료형은 요소 하나를 끄집어내서 사용할 수 있습니다.)
.
format()를 사용하지 않는 대신, 문자열의 따옴표앞에 f를 붙여주는데요,(f"...")
신기한것은 숫자값을 포맷팅에 사용한다면, {}안에서 숫자값끼리의 산술연산도 가능합니다.
방식의 순서를 따지면, f-string > % operator > str.format 순으로 빠르다고 합니다. 여기까지 해서 파이썬 포맷팅의 3가지 방식을 알아보았는데요. 이정도로만 포맷팅을 알면 아직 포맷팅을 100% 활용할 수 없습니다!
포맷팅하면서 넣는 값을 세부적으로 원하는 대로 설정해줄 수 있는데요, 그 설정해줄 수 있는 형식이 매우 다양하고 폭 넓은 형식을 가지고 있습니다! 이부분에 대해서는 다음 글을 참고해 주시면 감사하겠습니다 :-)
(사실 포맷팅에서 중요한 심화부분이니만큼 하나의 글로 묶어서 올릴려고 했지만, 글이 매우 길어지고, 주제가 난잡해질껏 같아서 다음글로 분리했습니다.)
연결 포스팅 :
2020/03/11 - [파이썬/문법] - 자료형 - 3-5. 문자열 포맷팅 심화, 형식 지정자
'파이썬(Python) > 문법' 카테고리의 다른 글
자료형 - 4-1. 리스트자료형 (0) | 2020.03.25 |
---|---|
자료형 - 3-5. 문자열 포맷팅 심화, 형식 지정자 (1) | 2020.03.11 |
자료형 - 3-3. 문자열 함수 (0) | 2020.03.06 |
자료형 - 3-2. 인덱싱과 슬라이싱 (0) | 2020.02.22 |
자료형 - 3-1. 문자열자료형 str (0) | 2020.02.22 |