print function
아래의 help(print)
를 보면 print()
함수는 default로 줄바꿈을 해준다.
1
2
3
4
5
6
7
8
9
10
11
| Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', **end='\n'**, file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
`end`: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
|
그런데 console 창에서 아래의 코드를 실행 하면 1초마다 숫자를 띄워주는 것이 아니라 3초가 다 지난 후에 결과를 한꺼번에 띄워 진행 상황을 알 수가 없다.
기본적으로 python에서는
개행문자'\n'
을 받기 전까진 문자열을 출력하지 않기 때문이다.
아래의 코드는 default인 end='\n'
을 한 칸의 띄우는 end=' '
로 바꿔줬기 때문에 console창에 출력을 하고 있지 않다가 코드 실행이 종료되면 한꺼번에 그 결과를 띄워준다.
(참고로 이는 시스템마다 다른데 예로 같은 코드를 jupyter notebook에서 실행하면 1초마다 출력을 해서 진행 상황을 알 수 있게 해준다.)
1
2
3
4
5
6
| import time
import sys
for i in range(3):
print(i, end=' ')
time.sleep(1)
|
stdout.flush()
stdout.flush()
는 print()
함수의 개행 여부와 상관 없이 출력을 해 주는 기능을 한다.
만일 줄바꿈이 없는 문자열을 진행상황을 확인하면서 출력하고 싶을 때는
flush=True
로 해줘 버퍼에 있는 문자열을 모두 출력하게 해준다.
1
2
3
4
5
6
| import time
import sys
for i in range(3):
print(i, end=' ', flush=True)
time.sleep(1)
|
1
2
3
4
5
6
| # 1초 후...
0
# 2초 후...
0 1
# 3초 후...
0 1 2
|
아래 처럼 print문
다음에 sys.stdout.flush()
를 호출해줘도 똑같은 결과가 나온다.
1
2
3
4
5
6
7
| import time
import sys
for i in range(3):
print(i, end=' ')
sys.stdout.flush()
time.sleep(1)
|
1
2
3
4
5
6
| # 1초 후...
0
# 2초 후...
0 1
# 3초 후...
0 1 2
|