2017-09-08 1 views
1

에 완료를 위해 내가 for 루프를 사용하여 동일한 라인에 일련 번호를 표시 할 실행이 내가 무슨 짓을 :인쇄가() 함수는 후 루프 파이썬 3

for i in range(10): 
    sleep(1) 
    print(i, end=" ") 

이것은 가정된다 for 루프를 반복 할 때마다 숫자 (0, 1, 2, ..., 10)를 하나씩 인쇄하십시오. 대신 프로그램은 루프가 완료 될 때까지 기다린 다음 모든 숫자를 한 번에 인쇄합니다.

왜 이런 일이 일어나고 있는지 이해할 수 없지만이 동작과 감사의 원인은 무엇입니까?

답변

3

귀하의 stdout은 회선 버퍼입니다. 즉, 개행이 발생할 때까지 텍스트를 표시하지 않습니다. print() function documentation에서

for i in range(10): 
    sleep(1) 
    print(i, end=" ", flush=True) 

: 당신은 명시 적으로 버퍼를 플래시 할 필요가

출력은 일반적으로 파일에 의해 결정된다 버퍼링 여부

하지만 플러시 키워드 인수가 true 인 경우, 스트림 강제로 플러시됩니다.

그리고 sys.stdout에서

: 상호 작용, 표준 스트림 라인 버퍼링

.

+0

감사합니다. –