본문 바로가기
- 배움이 있는 삶/- Software

print 함수 다양하게 사용하기

by story of interesting 2022. 12. 26.
반응형

Print 함수는 기본인데, 가끔 원하는 형식대로 잘 안될때가 있습니다. 이를 위해 공부해 보고, 잘 정해 두신 곳이 있어 공유 합니다.

    • % 기호를 이용한 출력: 문자 / 정수 / 실수 / 여러 개 출력, 줄 바꾸기, 줄 붙이기
    • {}.format( )을 이용한 출력: 기본 / 여러 개 출력, 순서 정해주기, 백분율(%)
    • f string을 이용한 출력: print(f' ') = 파이썬 3.6부터 도입된 방식
    • 심화: 딥러닝 코드 사례 - Neural Style Transfer


% 기호를 이용한 출력

가장 오래된 출력 형식이다.

문자열을 출력할 때에는 '%s' 형식을 사용한다.

name = 'Ariana Grande'

print('첫번째 출연자는 %s다' % name) → 첫번째 출연자는 Ariana Grande다

 

정수를 출력하려면 '%d' 형식을 사용한다.

count = 100

print('오늘은 윗몸일으키기 %d개를 했다' % count) → 오늘은 윗몸일으키기 100개를 했다

실수를 출력하려면 '%a.bf' 형식을 사용하는데, 여기서 a는 숫자의 총 길이(소수점 포함)이고 b는 소수점 이하의 길이다.

num = 3.141592

print('pie는 %6.4f이다' % num) → pie는 3.1416이다


데이터가 2개 이상일 때는 % 뒤에 튜플 형식으로 데이터를 써준다.

runner = '우샤인 볼트'

track = 100

time = 9.58

print('%s가 %d미터를 %4.2f초에 뛰었다' % (runner, track, time)) → 우샤인 볼트가 100미터를 9.58초에 뛰었다


줄을 바꿔 출력하려면 '\n'을 사용한다. (키보드에 따라 '\' 대신 '\'로 표시되어 있기도 하다)

print('봄\n여름\n가을\n겨울')

→ 봄

여름

가을

겨울

다음은 위와 반대로 줄을 붙여 출력하는 방법을 설명한다.

원래 파이썬에서 print( )를 두 번 쓰면 출력 결과가 두 줄로 나온다.

print('눈송이')

print('님 환영합니다')

눈송이

님 환영합니다

이를 이어서 한 줄로 나오게 하려면 end=''를 사용한다

print('눈송이', end='')

print('님 환영합니다')

눈송이님 환영합니다


{}.format( )을 이용한 출력

파이썬은 위에서 설명한 % 기호를 이용한 출력 형식 이외에 메소드 호출 방식을 지원한다. 즉, { }.format( ) 형식이다.

위에서 예로 들었던 'pie는 3.14' 출력을 메소드 호출 방식으로 쓰면 다음과 같다.

 

num = 3.141592

print('pie는 {:.2f}이다'.format(num))  # 비교: print('pie는 %4.2f이다' % num)

→ pie는 3.14이다

 

출력할 내용이 여러 개일 때는 다음과 같이 쓴다. format( ) 안의 변수들이 순서대로 사용된다.

item = '2016년산 바롤로' bottles = 10 print('{} 재고가 {}병 있다'.format(item, bottles)) # {0}, {1}이 쓰였음 → 2016년산 바롤로 재고가 10병 있다

출력할 내용이 여러 개일 때 순서를 정해주기 위해서 { }안에 숫자를 쓰기도 한다. 숫자는 0, 1, 2... 의 순서로 사용한다. 위의 코드를 다음처럼 바꿔 쓸 수 있다.

item = '2016년산 바롤로' bottles = 10 print('{0} 재고가 {1}병 있다'.format(item, bottles)) # {0}, {1}이 쓰였음 → 2016년산 바롤로 재고가 10병 있다

숫자를 백분율로 출력할 수도 있는데, 이때는 {:.3%}과 같은 형식을 쓴다. print( ) 함수가 알아서 숫자를 백분율로 바꾸어 표시하기 때문에 100을 곱하지 않아야 한다.

predict = 0.84321754 print('예측 확률은 {:.3%}입니다'.format(predict)) → 예측 확률은 84.322%입니다

f string을 이용한 출력: print(f' ') = 파이썬 3.6부터 도입

f string이라 부르는 이 출력 형식은 2016년 파이썬 3.6부터 도입되었는데, 아직 자주 눈에 뜨이지는 않는다. 기존 출력 방식으로 써진 코드들이 많기 때문이다. 하지만 f string은 사용이 더 편리하다.

f나 F 뒤에 따옴표를 적어주고, { } 안에 변수나 고정값을 갖는 문자(열)를 입력하는 형식으로 사용한다.

먼저 문자와 정수를 출력하는 예이다.

place = '개울가' duration = 30 print(f'오늘은 {place}에서 {duration}분을 뛰었다') → 오늘은 개울가에서 30분을 뛰었다

다음은 실수를 출력하는 예이다. :.2f를 넣어주어 소수점 이하 2자리를 표시했다.

racer = '우샤인 볼트' time = 9.58 print(f'100미터 달리기 세계기록은 {racer}의 {time:.2f}초다.')100미터 달리기 세계기록은 우샤인 볼트의 9.58초다.

1,234,567처럼 천 단위마다 콤마를 넣으려면 다음과 같이 : 뒤에 콤마를 넣어준다.

calories = 1311.5 print(f'20대 여성의 평균 기초대사량은 {calories:,.1f}kcal다')20대 여성의 평균 기초대사량은 1,311.5kcal다

{ } 안에 계산식을 넣으면 실행 시(run time)에 계산하여 결괏값을 출력한다.

acc = 0.92148763 print(f'Accuracy: {acc*100:.4f}%') # acc*100을 계산함 → Accuracy: 92.1488%

 

 


 

심화: 딥러닝 코드 사례 - Neural Style Transfer

출력 형식 지정은 print( ) 함수뿐만 아니라 문자열을 조합하여 파일을 저장할 때도 쓴다. 다음은 원본 이미지의 content에 참조 이미지의 style을 적용하여 새로운 이미지를 만들어내는 Neural Style Transfer의 코드 일부이다. 생성된 이미지를 매 100번째 iteration마다 파일로 저장하는 내용이다. 코드가 약간 복잡해 보이지만 정수 출력은 '%d' 형식을 쓴다는 것을 기억하고 ' "_at_iteration_%d.png" % i ' 부분 위주로 읽어 보자. 

result_prefix = "cezanne" if i % 100 == 0: img = deprocess_image(combination_image.numpy()) fname = result_prefix + "_at_iteration_%d.png" % i keras.preprocessing.image.save_img(fname, img) (파일 이름이 다음처럼 저장된다 cezanna_at_iteration_100.png cezanna_at_iteration_200.png cezanna_at_iteration_300.png...)

반응형