Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 문자열 포매팅 비교: % 연산자 vs .format() 메서드

파이썬에서 문자열을 포매팅하는 대표적인 방법으로 % 연산자와 .format() 메서드가 있습니다. 두 방식은 겉보기에 비슷하지만, 동작 방식에서 중요한 차이가 있습니다. 이 글에서는 % 연산자의 숨겨진 함정과 .format()의 장점을 예제와 함께 살펴보겠습니다.

% 연산자의 모호성: 변수인가, 튜플인가?

% 연산자는 인자로 변수 하나 또는 튜플을 받을 수 있습니다. 그렇기 때문에 개발자가 의도를 매우 명확하게 표현해야 합니다. 예를 들어, 튜플을 그대로 포매팅하려고 하면 어떻게 될까요?

예제 코드

my_tuple = (1, 2, 3)
"My tuple: %s" % my_tuple

대부분의 개발자는 아래와 같은 출력을 기대할 것입니다.

My tuple: (1, 2, 3)

예상과 다른 결과: TypeError 발생

하지만 실제로 실행하면 TypeError가 발생합니다. % 연산자는 튜플을 여러 개의 개별 인자로 해석하기 때문입니다. 즉, "My tuple: %s"에는 자리표시자가 하나뿐인데 인자가 세 개(1, 2, 3) 전달된 것으로 처리되는 것입니다.

항상 원하는 대로 출력되도록 보장하려면, 단일 인자를 한 요소짜리 튜플로 감싸서 명시적으로 전달해야 합니다.

"hi there %s" % (name,)  # 단일 인자를 한 요소짜리 튜플로 전달

왜 .format()이 더 나은가?

이런 세부적인 주의사항을 매번 기억하는 것은 쉽지 않으며, 실수하면 곧바로 버그로 이어질 수 있습니다. 반면 .format()은 이러한 문제가 전혀 없습니다. 튜플이든 단일 값이든 일관되게 처리하며, 코드의 가독성 면에서도 훨씬 깔끔합니다.

"My tuple: {}".format(my_tuple)  # My tuple: (1, 2, 3) 정상 출력

정리

% 연산자는 간결하지만 인자 해석 과정에서 모호성이 있어 주의가 필요합니다. 레거시 코드를 유지보수하는 경우가 아니라면, 이러한 함정이 없는 .format() 또는 파이썬 3.6 이상에서 지원하는 f-string을 사용하는 것이 더 안전하고 가독성이 뛰어난 선택입니다.