2013-11-01 2 views
1

한 번에 한 줄씩 문자를 인쇄하고 싶습니다. 이 코드가 끝내는 것은 한 번에 한 줄씩 문자를 읽는 것입니다 (각 문자 사이에 일시 중지가 있으므로 문자를 올바르게 반복한다는 것을 알게됩니다). 그러면 그 행을 끝내면 모든 문자가 인쇄됩니다. 일단.한 번에 하나의 문자를 루프로 인쇄하십시오.

for line in lines: 
    for ch in line: 
     print(ch, end = ' ') 
     os.system("pause") 

그러나, 내가 할 경우 :

for line in lines: 
    for ch in line: 
     print(ch, end = '\n') #same effect as print(ch) 
     os.system("pause") 

는 줄 바꿈 한 문자, 다음 시스템 일시 중지를 인쇄합니다.

첫 번째 시나리오에서는 제대로 인쇄되지 않지만 두 번째 시나리오에서는 제대로 작동하지 않는 이유는 무엇입니까?

print ("is", end=' ') 
os.system("pause") 
print("newline?") 

그것은 시스템 일시 정지 후까지 내 메시지를 출력하지 않았다

또한, 나는 그냥 무작위 테스트를 실행했습니다. 일시 중지 전에 "is"가 인쇄되지 않은 이유는 무엇입니까? 이해하지 못하는 것보다 print() 함수의 숨겨진 동작이있는 것처럼 보입니다. 누구나 설명이 있으십니까?

답변

1

출력 버퍼링 중 : 줄 바꿈을 보낼 때까지 출력이 유지됩니다. 한 번에 한 줄씩 인쇄하는 것이 한 번에 한 문자 씩 인쇄하는 것보다 효율적이기 때문입니다.

원하는 경우 각 print() 뒤에 sys.stdout.flush()을 입력 할 수 있습니다. Other solutions here. 개인적으로 나는 래퍼 하나와 다소 비슷합니다. 최대 평 점성을 위해 with 블록에 stdout을 설정하고 복원하는 컨텍스트 관리자와이를 결합 할 수 있습니다.

+0

당신은 신사이고 학자입니다. 무작위 테스트를 한 후에 버퍼에 대해 뭔가있는 것으로 생각했습니다. 답변 해 주셔서 감사 드리며 가능한 한 빨리 표시하겠습니다. –

관련 문제