python `print` не работает в цикле

У меня есть несколько циклов вместе и сон в самом внутреннем цикле. например:

from time import sleep for i in range(10): print i, for j in range(-5,5): if j > 0: print '.', else: print 'D', sleep(1) print '' 

если вы запустите код, вы можете ожидать получить значение i после него D sleep 1 second и еще один D и снова спать до конца.

но результат разницы, он ждет 10 секунд и печатает всю строку 0 DDDDDD . . . . 0 DDDDDD . . . . и снова ожидание печати следующей строки.

Я обнаружил, что запятая в конце печати вызывает эту проблему. Как я могу это решить?

2 Solutions collect form web for “python `print` не работает в цикле”

Из-за существования запятой выходные буферы до \n .

Вы должны очистить stdout после каждой печати или использовать sys.stdout.write и буфер для очистки.

Определите свой метод печати:

 import sys def my_print(text): sys.stdout.write(str(text)) sys.stdout.flush() 

и в конце строки напечатайте a \n

Проблема с использованием print <something>, является буферизацией и печатью только тогда, когда идентификатор результата готов к печати.

Вы можете решить эту print_function с помощью print_function с __future__ (что также будет соответствовать Python 3):

 from __future__ import print_function from time import sleep import sys for i in range(10): print(i, end='') for j in range(-5,5): if j > 0: print('.', end='') else: print('D', end='') sys.stdout.flush() sleep(1) print('') 
Python - лучший язык программирования в мире.