728x90
반응형
개요
python의 문자열 포매팅 방법에는 3가지가 있다. 각각의 사용법과 차이를 알아본다.
% Operator
Python의 초기 버전에서 사용되던 전통적인 방식입니다.
자료형 별로 특정 문자를 사용해 지정해준다.
자료형 문자 입력 자료형
정수 | %d | int, float |
실수 | %f | int, float |
문자열 | %s | str, int, float |
8진수 | %o | int |
16진수 | %x | int |
% | %% |
operator = "%s is %d years old" % (name, age)
str.format() method
Python 2.6 이상에서 도입된 보다 현대적이고 유연한 방식입니다.
이 방식은 중괄호 **{}**를 플레이스홀더로 사용하며, format() 메소드를 통해 값을 주입합니다.
str_format = "{} is {} yeard old".format(name, age)
f-string
Python 3.6 이상에서 도입된 가장 현대적인 방식입니다. 이 방식은 문자열 앞에 **f**를 붙여 사용하며, 중괄호 내에 직접 변수나 표현식을 넣을 수 있습니다.
f_string = f"{name} i {age} years old"
실행 시간과 성능
import timeit
# 테스트에 사용될 변수
name = "World"
# % 연산자를 사용한 문자열 포매팅
percent_time = timeit.timeit('"Hello, %s" % name', globals=globals(), number=1000000)
# str.format() 메서드를 사용한 문자열 포매팅
format_time = timeit.timeit('"Hello, {}".format(name)', globals=globals(), number=1000000)
# f-strings를 사용한 문자열 포매팅
fstring_time = timeit.timeit('f"Hello, {name}"', globals=globals(), number=1000000)
# 결과 출력
print(f"% 연산자 시간: {percent_time}")
print(f"str.format() 메서드 시간: {format_time}")
print(f"f-strings 시간: {fstring_time}")
timeit 모듈을 사용하여 각 포매팅 방법을 1,000,000번 실행하고, 그 실행 시간을 초단위로 출력하는 코드다. globals=globals() 는 timeit 함수에 현재 글로벌 네임스페이스를 전달하여 name 변수를 포매팅 문자열 안에서 사용할 수 있게 한다.
위 결과를 보면, f-string , str.format() , % operator 순으로 빠르다.
- f-string 은 실행 시간에 표현식을 직접 평가하여 문자열에 삽입하기 때문에 추가적인 파싱이나 변환 작업 없이 직접적인 문자열 생성이 가능하다
- str.format() 메서드는 메서드 호출과 인자 파싱으로 인한 오버헤드가 있다
- % operator 는 더 오래된 방식으로 더 많은 파싱과 변환 작업이 필요하다
728x90
반응형