2012-05-30 5 views
0

나는 fibonacci 시퀀스를 만들고 있습니다. 콘솔 (Windows)을 다룰 때마다 너무 빠르게 실행되어 갑자기 종료됩니다.수면 모드의 발전기가 작동하지 않습니까?

그래서 나는 무엇이 진행되고 있는지보기 위해 Time.sleep()을 사용합니다. 여기 소스입니다 : 나는 0.5 초 당 "... 1 1 2 3"예상

def fibo(): 
     pv1,pv2 = 0,1 
     while True: 
     yield pv2 
     pv1,pv2=pv2,pv1+pv2 
    import time 
    f=fibo() 
    for result in f: 
     print(result,end=' ') 
     time.sleep(0.5) 

하지만 그것은 작동하지! 수면 방법이 없으면 잘 돌아갑니다. 나는 뭔가가 있다고 생각하지만, 나는 왜 그 이유를 알기에는 너무 무식합니다.

+1

"작동하지 않음"이란 무엇을 의미합니까? 그것은 무엇을 하는가? –

+0

내 컴퓨터에서 아무 일도 일어나지 않습니다. 콘솔 화면은 아무 것도 만들지 않고 그냥 서있다. –

+0

나는 커맨드 라인 터미널에서 작업하고 거기에서 youyr 프로그램을 호출 할 것을 제안 할 것이다 - 당신의 코드에 대해 걱정할 수있는이 방식으로, 개발이 불완전한 환경에 필요한 인공 구조물이 아닌 즉 time.sleep에 대한 호출). 파이썬 개발 자체는 명령 행을 사용하는 사람들이 만든다. – jsbueno

답변

1

기본적으로 표준 출력이 터미널로 보내지면 출력은 라인 버퍼됩니다. 수동으로 표준 출력을 플러시하여 코드가 예상대로 작동하도록 할 수 있습니다. 표준 출력을 플러시하는 방법은 다음과 같습니다.

import sys # probably near the top of the file 
sys.stdout.flush() # after printing 
+0

와우 작동! 대단히 감사합니다! –

+0

하지만 버퍼 영역에서 수면 유무와 상관없이 어떤 점이 있는지 알지 못합니다 ... 의사 나 링크를 소개해 주시겠습니까? 나는 고마워 할 것이다! –

+1

@stackneveroverflow : 아무런 차이가 없습니다. 잠을 자면 문제가 더욱 분명해진다. 잠을 자지 않으면 문제가 잘 보이지 않습니다. 프로그램이 종료되면 표준 출력이 플러시됩니다. 그래서 그 프로그램의 출력을 보았습니다 (간략하게). 실제로, 명백한 홍조가 없더라도, 수면 상태에서도 대본 마무리가 물결 치고 있습니다. 간격이 너무 짧기 때문에보기가 어렵습니다. 어쨌든, [이것은 다소 관련있는 질문입니다] (http://stackoverflow.com/q/107705). 진정한 대답은 C99 표준의 §7.1.3 ¶3입니다. 덕분에 – icktoofay