문자열을 인쇄하는 다양한 방법 활용

파이썬 2.x에서는 print 함수의 경우 인자들이 굳이 괄호 안에 들어 있어야 할 필요는 없다. 또한 여러 개의 값을 동시에 인쇄할 수도 있다. 이때 인자들은 콤마로 구분지어진다.


In [1]:
a = "string"
b = "string1"

In [2]:
print a, b


string string1

In [3]:
print "The return value is", a


The return value is string

주의: 아래와 같이 하면 모양이 기대와 다르게 나온다.


In [4]:
print(a, b)


('string', 'string1')

In [5]:
print("The return value is", a)


('The return value is', 'string')

하지만 위와 같이 괄호를 사용하지 않는 방식은 파이썬 3.x에서는 지원되지 않는다. 따라서 기본적으로 아래와 같이 사용하는 것을 추천한다.


In [6]:
print(a+' '+b)


string string1

In [7]:
print("The return value is" + " " + a)


The return value is string

아래와 같이 할 수도 있다


In [8]:
print(a),; print(b)


string string1

그런데 위 경우 ab를 인쇄할 때 스페이스가 자동으로 추가된다. 그런데 스페이스 없이 stringstring1으로 출력하려면 두 가지 방식이 있다.

  • 문자열 덧셈 연산자를 활용한다.
  • 서식이 있는 인쇄방식(formatted printing)을 사용한다.

In [9]:
print(a+b)


stringstring1

In [10]:
print("{}{}".format(a,b))


stringstring1

서식이 있는 인쇄방식을 이용하여 다양한 형태로 자료들을 인쇄할 수 있다. 서식을 사용하는 방식은 크게 두 가지가 있다.

  • % 를 이용하는 방식

    • C, Java 등에서 사용하는 방식과 거의 비슷하다.
  • format 키워드를 사용하는 방식

    • 파이써 만의 새로운 방식이며 % 보다 좀 더 다양한 기능을 지원한다.
    • Java의 경우 MessageFormat 클래스의 format 메소드가 비슷한 기능을 지원하지만 사용법이 좀 더 복잡하다.

서식지정자(%)를 활용하여 문자열 인쇄하기

  • %s: 문자열 서식지정자
  • %d: int형 서식지정자

In [11]:
print("%s%s%d" % (a, b, 10))


stringstring110

In [12]:
from math import pi

부동소수점 실수의 경우 여러 서식을 이용할 수 있다.

  • %f: 소숫점 이하 6째 자리까지 보여준다. (7째 자리에서 반올림 한다.)
  • %e: 지수 형태로 보여준다.
  • %g: %f 또는 %e 방식 중에서 보다 간단한 서식으로 보여준다.

In [13]:
print("원주율값은 대략 %f이다." % pi)


원주율값은 대략 3.141593이다.

In [14]:
print("원주율값은 대략 %e이다." % pi)


원주율값은 대략 3.141593e+00이다.

In [15]:
print("원주율값은 대략 %g이다." % pi)


원주율값은 대략 3.14159이다.

소수점 이하 숫자의 개수를 임의로 정할 수 있다.


In [16]:
print("원주율값은 대략 %.10f이다." % pi)


원주율값은 대략 3.1415926536이다.

In [17]:
print("원주율값은 대략 %.10e이다." % pi)


원주율값은 대략 3.1415926536e+00이다.

In [18]:
print("원주율값은 대략 %.10g이다." % pi)


원주율값은 대략 3.141592654이다.

pi값 계산을 소숫점 이하 50자리 정도까지 계산함을 알 수 있다. 이것은 사용하는 컴퓨터의 한계이며 컴퓨터의 성능에 따라 계산능력이 달라진다.


In [19]:
print("지금 사용하는 컴퓨터가 계산할 수 있는 원주율값은 대략 '%.50f'이다." % pi)


지금 사용하는 컴퓨터가 계산할 수 있는 원주율값은 대략 '3.14159265358979311599796346854418516159057617187500'이다.

여러 값을 보여주면 아래 예제처럼 기본은 왼쪽에 줄을 맞춘다.


In [20]:
print("%f"% pi)
print("%f"% pi**3)
print("%f"% pi**10)


3.141593
31.006277
93648.047476

오른쪽으로 줄을 맞추려면 아래 방식을 사용한다.

  • 숫자 12는 pi**10의 값인 93648.047476가 점(.)을 포함하여 총 12자리로 가장 길기에 선택되었다.

  • 표현방식이 달라지면 다른 값을 선택해야 한다.


In [21]:
print("%12f"% pi)
print("%12f"% pi**3)
print("%12f"% pi**10)


    3.141593
   31.006277
93648.047476

In [22]:
print("%12e"% pi)
print("%12e"% pi**3)
print("%12e"% pi**10)


3.141593e+00
3.100628e+01
9.364805e+04

In [23]:
print("%12g"% pi)
print("%12g"% pi**3)
print("%12g"% pi**10)


     3.14159
     31.0063
       93648

In [24]:
print("%16.10f"% pi)
print("%16.10f"% pi**3)
print("%16.10f"% pi**10)


    3.1415926536
   31.0062766803
93648.0474760830

In [25]:
print("%16.10e"% pi)
print("%16.10e"% pi**3)
print("%16.10e"% pi**10)


3.1415926536e+00
3.1006276680e+01
9.3648047476e+04

In [26]:
print("%16.10g"% pi)
print("%16.10g"% pi**3)
print("%16.10g"% pi**10)


     3.141592654
     31.00627668
     93648.04748

비어 있는 자리를 숫자 0으로 채울 수도 있다.


In [27]:
print("%012f"% pi)
print("%012f"% pi**3)
print("%012f"% pi**10)


00003.141593
00031.006277
93648.047476

In [28]:
print("%012e"% pi)
print("%012e"% pi**3)
print("%012e"% pi**10)


3.141593e+00
3.100628e+01
9.364805e+04

In [29]:
print("%012g"% pi)
print("%012g"% pi**3)
print("%012g"% pi**10)


000003.14159
0000031.0063
000000093648

In [30]:
print("%016.10f"% pi)
print("%016.10f"% pi**3)
print("%016.10f"% pi**10)


00003.1415926536
00031.0062766803
93648.0474760830

In [31]:
print("%016.10e"% pi)
print("%016.10e"% pi**3)
print("%016.10e"% pi**10)


3.1415926536e+00
3.1006276680e+01
9.3648047476e+04

In [32]:
print("%016.10g"% pi)
print("%016.10g"% pi**3)
print("%016.10g"% pi**10)


000003.141592654
0000031.00627668
0000093648.04748

자릿수는 계산결과를 예상하여 결정해야 한다. 아래의 경우는 자릿수를 너무 작게 무시한다.


In [33]:
print("%12.20f" % pi**19)


2791563949.59784364700317382812

format 함수 사용하여 문자열 인쇄하기

format 함수를 이용하여 서식지정자(%)를 사용한 결과를 동일하게 구할 수 있다.


In [34]:
print("{}{}{}".format(a, b, 10))


stringstring110

In [35]:
print("{:s}{:s}{:d}".format(a, b, 10))


stringstring110

In [36]:
print("{:f}".format(pi))
print("{:f}".format(pi**3))
print("{:f}".format(pi**10))


3.141593
31.006277
93648.047476

In [37]:
print("{:12f}".format(pi))
print("{:12f}".format(pi**3))
print("{:12f}".format(pi**10))


    3.141593
   31.006277
93648.047476

In [38]:
print("{:012f}".format(pi))
print("{:012f}".format(pi**3))
print("{:012f}".format(pi**10))


00003.141593
00031.006277
93648.047476

format 함수는 인덱싱 기능까지 지원한다.


In [39]:
print("{2}{1}{0}".format(a, b, 10))


10string1string

인덱싱을 위해 키워드를 사용할 수도 있다.


In [40]:
print("{s1}{s2}{s1}".format(s1=a, s2=b, i1=10))


stringstring1string

In [41]:
print("{i1}{s2}{s1}".format(s1=a, s2=b, i1=10))


10string1string

인덱싱과 서식지정자를 함께 사용할 수 있다


In [42]:
print("{1:12f}, {0:12f}".format(pi, pi**3))


   31.006277,     3.141593

In [43]:
print("{p1:12f}, {p0:12f}".format(p0=pi, p1=pi**3))


   31.006277,     3.141593

% 연산자를 사용하는 방식과 format 함수를 사용하는 방식 중에 어떤 방식을 선택할지는 경우에 따라 다르다.

  • % 방식은 C, Java 등에서 일반적으로 지원되는 방식이다.
  • 반면에 format 방식은 좀 더 다양한 활용법을 갖고 있다.

고급 기술

str 함수와 repr 함수에 대해 알아둘 필요가 있다.

str 함수

파이썬에서 사용하는 모든 객체는 __str__ 메소드를 갖고 있으며, 이 메소드는 해당 객체를 보여주는 데에 사용된다. 예를 들어 print 명령어를 사용하면 무조건 해당 객체의 __str__ 메소드가 호출되어 사용된다.

또한 str 함수가 있어서 동일한 역할을 수행한다.


In [44]:
a = 3.141592

In [45]:
print(a)


3.141592

In [46]:
a.__str__()


Out[46]:
'3.141592'

In [47]:
str(a)


Out[47]:
'3.141592'

In [48]:
b = [2, 3.5, ['school', 'bus'], (1,2)]
str(b)


Out[48]:
"[2, 3.5, ['school', 'bus'], (1, 2)]"

str 함수는 문자열값을 리턴한다.


In [49]:
type(str(b))


Out[49]:
str

앞서 언급한 대로 __str__ 메소드는 print 함수뿐만 아니라 서식을 사용할 때도 기본적으로 사용된다.


In [50]:
print(b)


[2, 3.5, ['school', 'bus'], (1, 2)]

In [51]:
"%s" % b


Out[51]:
"[2, 3.5, ['school', 'bus'], (1, 2)]"

In [52]:
"{}".format(b)


Out[52]:
"[2, 3.5, ['school', 'bus'], (1, 2)]"

repr 함수

__str__ 와 더불어 __repr__ 또한 모든 파이썬 객체의 메소드로 존재한다.

  • __str__와 비슷한 기능을 수행하지만 __str__ 보다 정확한 값을 사용한다.
  • eval 함수와 사용하여 본래의 값을 되살리는 기능을 제공한다.
  • repr 함수를 사용하면 해당 객체의 __repr__ 메소드가 호출된다.

In [53]:
c = str(pi)

In [54]:
pi1 = eval(c)
pi1


Out[54]:
3.14159265359

하지만 pi1을 이용하여 원주율 pi 값을 되살릴 수는 없다.


In [55]:
pi1 - pi


Out[55]:
2.0694557179012918e-13

repr 함수는 eval 함수를 이용하여 pi 값을 되살릴 수 있다.


In [56]:
pi2 = repr(pi)

In [57]:
type(pi2)


Out[57]:
str

In [58]:
eval(pi2) - pi


Out[58]:
0.0

repr 함수를 활용하는 서식지정자는 %r 이다.


In [59]:
"%s" % pi


Out[59]:
'3.14159265359'

In [60]:
"%r" % pi


Out[60]:
'3.141592653589793'

In [61]:
"%d" % pi


Out[61]:
'3'

서식지정자 활용 정리

원주율 pi 값을 표현하는 다양한 방식을 아래 표에 담아본다.

서식지정자 처리방식 예제
%f 부동소수점 '3.141593'
%e 지수함수 표현 '3.141593e+00'
%g %f와 %e 중 짧은 것 '3.14159'
%d 정수형 '3'
%s str() '3.14159265359'
%r repr() '3.141592653589793'