언어/Python

파이썬 포멧팅 %, {}, f-string

JM Lee 2023. 5. 3. 01:49
728x90

자잘한 프로젝트, 알고리즘 문제를 풀어보면서 느끼는 것이지만,

포멧팅에 대해 정리가 잘 안 되어서 여러 번 찾다 보니 그냥 공부하기로 마음먹었다.

 

새벽까지 깨어있을 만큼 공부해야 하는 것들이 참 많지만.. 그럼에도 이번 주제는 정리해야겠다는 생각이 확실히 들어서!

 


문자열 포멧팅이 무엇일까?

 

문자열 포맷팅(string formatting) : 문자열 속 특정한 위치에 특정한 값을 삽입해 주는 것.

만약에 문자열 중에 일부가 변할 수 있는 가능성이 있는 경우 문자열 포맷팅을 통해 그 부분만 바꿔줄 수 있다.

 

밑줄 그은 부분이 핵심이다.

알고리즘 해결과정에서 특히 중요하다고 생각하는데, 프로젝트에서도 간혹 써먹을 것 같다.

 

%

 

우리가 써먹는 방식은 주로 f-string이었지만, %을 통한 format도 있음을 확인했다.

 

개념 :  (%s : 문자열, %d : 정수, %f : 실수) 다음과 같이 사용한다.

 

간단히 아래 예시를 보았다.

print(1234567890) #자릿수를 표현하기 위해서 적음
print('%10d'%(111)) # 10자리를 가진다.
print('%08d'%(111)) # 8자리를 가지고, 빈자리를 0으로 채운다.
print('%6.2f'%(11.123124))  # 총 6자리 가지고 소수점 이하 둘째자리까지 표현
print('%06.2f'%(11.123124))  # 총 6자리 가지고 소수점 이하 둘째자리까지 표현, 빈자리는 0 채움

% 포멧에서는 0을 쓰는지에 대한 여부도 중요한 역할을 하는데, 이것에 대한 결과를 보자면

1234567890
       111
00000111
 11.12
011.12

마지막 예시를 보면 소수점도 자릿수에 들어가는 것으로 보인다.

 

솔직히 %를 사용한 포맷팅은 잘 사용할 것으로 보이진 않지만.. 참고하기!

 

{}

{} 포맷팅은 % 포맷팅과 유사하지만,

{}의 다른 점은 데이터 타입에 상관하지 않는다는 점이다. 모든 데이터 타입이 {}을 사용한다.

 

주석에 설명해놨지만,

>은 좌측정렬, <은 우측정렬, ^은 가운데정렬이다. :와 함께 붙여주면 된다.

print(1234567890) #자릿 수 표현 위함
print('{:>3}'.format('5')) # >는 오른쪽정렬
						   # 3자리 중에 오른쪽부터 맞춰 씀(좌측정렬)
                           # __5
print('{:<3}'.format('5')) # <는 왼쪽정렬
						   # 3자리 중에 왼쪽부터 맞춰 씀(우측정렬)
                           # 5__
print('{:^3}'.format('5')) # ^는 가운데정렬
						   # 3자리 중에 가운데부터 맞춰 씀(가운데정렬)
                           # _5_
print('{:0>3}'.format(5)) # 빈자리를 0으로 채울수도 있음
						  # 050

 

f를 쓰면 %포맷팅처럼 정수도 실수로 변환이 가능하기 때문에 참고하면 좋을 듯

print('{:<10f}'.format(5))
# <는 왼쪽정렬, 실수는 기본적으로 소수점6자리까지 표현
# 5.000000
print('{:^10.2f}'.format(5))
# ^는 가운데정렬, 10을 썼으니 10자리 기준 가운데 정렬, 소수점 2자리 감안해서 가운데 정렬
# ______5.00

 

f-string

 

우리가 가장 많이 쓴 f-string이다.

새벽이라 집중력이 떨어지는데.. 그래도 열심히 써보자

ball = '축구공'
half_length = 반지름

length_int = 10.20
scale = 'cm'

print(f'{ball}의 {half_length}은 {length_int}{scale} 입니다.')
print(f'{ball}의 {half_length}은 {length_int:.1f}{scale} 입니다.')

축구공의 반지름은 10.20cm입니다.
축구공의 반지름은 10.2cm입니다.

코드를 보면 알 수 있듯이, f-string은 {}포맷팅에서 발전해온 것으로 보인다.

그럼 여기서는 무엇이 발전했을까? 에 초점을 두고 차이점을 확인했다.

 

확실한 차이점은 보다 더 직관적으로 변했다는 것이다.

한 눈에 보기에도 print 문을 보면 중괄호 안에 무엇을 넣어야 할지 훤히 보인다는 것이다.


이것을 사실 JSON 형태로 변환해서 써내려갈 때 $를 붙이는 것을 잊어서 얼떨결에 공부하게 됐는데,

앞으로도 자주 봐야 하는 문법이니깐... 기왕 공부하는 김에 간략히 정리해보았다.