print
по умолчанию печатает на sys.stdout
и буферизует вывод, который будет распечатан, внутри.
Будут ли буферизироваться выходные данные, как правило, по файлу, но если аргумент ключевого слова
flush
равен true, поток принудительно очищается.Изменено в версии 3.3: добавлен аргумент ключевого слова
blockquote>flush
.Задание документации
sys.stdout
,В интерактивных стандартных потоках буферизируется строка. В противном случае они блокируются блоком, как обычные текстовые файлы.
blockquote>Итак, в вашем случае вам нужно явно очистить, например
import time for i in range(10): print(i, flush=True) time.sleep(.5)
Хорошо, есть много путаницы вокруг этой буферизации. Позвольте мне объяснить как можно больше.
Прежде всего, если вы пытаетесь использовать эту программу в терминале, они выполняют буферизацию строк (что в основном означает, что всякий раз, когда вы сталкиваетесь с символом новой строки, отправляете буферизованные данные в
stdout
), по умолчанию. Итак, вы можете воспроизвести эту проблему в Python 2.7, например>>> import time >>> for i in range(10): ... print i, ... time.sleep(.5) ...
И в Python 3.x,
>>> for i in range(10): ... print(i, end='') ... time.sleep(.5)
Пропускаем
end=''
, потому что по умолчаниюend
\n
в соответствии с документациейprint(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
Поскольку по умолчанию
end
прерывает буферизацию линии, данные будут отправлен наstdout
.Другой способ воспроизвести эту проблему - сохранить фактическую программу, заданную OP в файле, и выполнить с помощью интерпретатора Python 3.x, вы увидите, что
stdout
внутренне буферизирует данные и ждет, пока программа закончит печать.