Python

3.5. 문자열 형식화

federe 2012. 1. 11. 12:18
파이썬은 값을 문자열로 형식화하는 방법을 지원합니다. 여기에는 아주 복잡한 표현식이 포함될 수 있지만 대부분의 기본적인 사용법은 %s 위치보유자로 값을 문자열에 삽입하는 것입니다. 
 
☞ 파이썬의 문자열 형식화는 구문이 C의 sprintf 함수와 똑 같습니다.  
 
예제 3.21. 기본적인 문자열 형식화

 

  1. >>> k = "uid"
  2. >>> v = "sa"
    >>> "%s=%s" % (k, v) ①
    'uid=sa'
 

①  전체 표현식은 문자열로 평가됩니다. 첫 %s는 k의 값으로 교체되고; 두번째 %s는 v의 값으로 교체됩니다. 다른 모든 문자들은 (이 경우, 등호 사인) 그대로 있습니다.  

 
(k, v)는 터플임에 주의하세요. 터플은 쓸모가 있다고 말한 적이 있습니다. 
 
단순한 문자열 결합에 이 정도는 너무 부담스럽다고 생각하실지 모르겠습니다. 문자열 형식화가 단순한 결합이 아니라는 점을 고려하지 않는다면 여러분의 생각이 옳을 수 있습니다. 단순히 형식화에 그치지 않고 유형도 강제로 변환합니다. 
 
예제 3.22. 문자열 형식화 vs. 문자열 결합

 

  1. >>> uid = "sa"
  2. >>> pwd = "secret"
    >>> print pwd + " is not a good password for " + uid      ①
    secret is not a good password for sa
    >>> print "%s is not a good password for %s" % (pwd, uid)
    secret is not a good password for sa
    >>> userCount = 6
    >>> print "Users connected: %d" % (userCount, )           ③ ④
    Users connected: 6
    >>> print "Users connected: " + userCount                 ⑤
    Traceback (innermost last):
      File "", line 1, in ?
    TypeError: cannot concatenate 'str' and 'int' objects

 

①  + 연산자는 문자열을 결합합니다.  
②  이런 사소한 예에서는 문자열 형식화로 문자열 결합과 같은 결과를 달성합니다. 
③  (userCount, )는 원소가 하나인 터플입니다. 맞습니다. 구문은 좀 이상하지만 그럴 만한 이유가 있습니다: 확실하게 터플임을 명시합니다. 사실, 리스트나 터플 또는 사전을 정의할 때 언제나 마지막 원소 다음에 쉼표를 포함시켜도 됩니다. 그러나 쉼표는 원소 한개짜리 터플을 정의할 때 필수 입니다. 쉼표가 없으면 파이썬은 (userCount)가 원소 한개짜리 터플인지 아니면 그냥 userCount의 값인지 알지 못합니다.  
④  문자열 형식화는 %s 대신에 %d를 지정하면 정수와 작동합니다.  
⑤  문자열을 문자열이 아닌 것과 결합하려고 하면 예외가 일어납니다. 문자열 형식화와 다르게 문자열 결합은 모든 것이 문자열일 경우에만 작동합니다.  
 
C의 printf에서처럼 파이썬의 문자열 형식화는 스위스 군용 칼과 같습니다. 수 많은 다양한 유형의 값을 특별하게 형식화하기 위한 옵션이, 즉 장식 문자열이 풍부합니다. 
 
예제 3.23. 숫자 형식화하기

 

  1. >>> print "Today's stock price: %f" % 50.4625   ①
  2. 50.462500
    >>> print "Today's stock price: %.2f" % 50.4625 ②
    50.46
    >>> print "Change since yesterday: %+.2f" % 1.5 ③
    +1.50

 

①  %f 문자열 형식화 옵션은 값을 십진수로 취급하고 그것을 소수 6자리까지 인쇄합니다.  
②  %f 옵션을 ".2"로 장식하면 값을 소수 두 자리까지 잘라냅니다.  
③  장식을 조합해 쓸 수도 있습니다. + 장식을 추가하면 값 앞에 더하기나 빼기 사인을 표시합니다. ".2" 장식은 여전히 그 자리에 있으며 값을 정확하게 소수 두 자리까지 채우고 있음을 주목하세요.