파이썬 문자열 포맷 : % vs. .format()
조회수 13237회
파이썬 2.6 소개된 str.format()
함수는 %
(형식 태그)를 이용하는 방식과 다소 다른 듯 합니다. 어떤 상황에 어떤 방식을 사용하는 것이 더 좋을까요?
아래 예시는 각각의 방식을 사용한 예시이며, 둘 모두 같은 결과를 보입니다. 어떤 차이가 있을까요?
#!/usr/bin/python sub1 = "python string!" sub2 = "an arg" a = "i am a %s" % sub1 b = "i am a {0}".format(sub1) c = "with %(kwarg)s!" % {'kwarg':sub2} d = "with {kwarg}!".format(kwarg=sub2) print a # "i am a python string!" print b # "i am a python string!" print c # "with an arg!" print d # "with an arg!"
또한 파이썬에서 문자열 포맷 작업은 언제 이루어지나요? 예를들어, 로깅 레벨이 HIGH로 설정되어 있으면 아래의
%
가 성능에 영향을 끼치나요? 만약 그렇다면, 그를 피할 방법이 있을까요?log.debug("some debug info: %s" % some_info)
1 답변
-
우선, 첫번째 질문에 대해 답을 드리자면
.format
은 여러 방면에서 좀더 세련되어 보입니다.%
는 변수나 튜플을 받아들이는 방식에 있어서 다소 귀찮을 수 있습니다. 아래 예시가 항상 작동할 것 처럼 보이지만,"hi there %s" % name
만약
name
변수가(1, 2, 3)
이라면,TypeError
를 발생시킬 겁니다. 만약 위의 예시가 항상 작동하도록 하기 위해서는,"hi there %s" % (name,)
과 같이 다소 지저분하게 코드를 작성해야 합니다. 반면,
.format
은 이러한 문제가 없습니다. 또한 올려주신 예시의 경우이도.format
이 훨씬 깔끔해 보일 겁니다.이와 같은 방식을 사용하지 않는 경우는 아래 두 경우 중 하나일 겁니다.
- 이와 같은 방식을 모르는 경우
- Python 2.5와의 호환이 필요한 경우
두번째 질문에 대해 답을 드리자면, 문자열 포맷 작업은 다른 연산들을 수행할 때 동시에 이루어집니다. 그리고 파이썬은 함수를 호출하기 전에 연산을 수행합니다. 따라서 올려주신
log.debug
에 관한 예시에서,"some debug info: %s" % some_info
가 먼저 수행되어 이를테면,"some debug info:roflcopters are active"
와 같이 변환된 뒤에log.debug()
함수로 넘어갈 것입니다.
댓글 입력