@artender

Странная логика Python?

Существует такой кусок кода:
from time import sleep

i = 5
while i > 0:
    print("1", end = "")
    i -= 1
    sleep(0.5)

При его выполнении, программа сначала дожидается конца цикла, и только потом выводит результат каждой итерации целиком. Я знаю, что для мгновенного вывода нужно добавить параметр flush = True, но не понимаю в чем его смысл. Почему программа не выводит результат каждой итерации изначально, без всяких параметров? В чем преимущество вывода после окончания цикла?
  • Вопрос задан
  • 2461 просмотр
Пригласить эксперта
Ответы на вопрос 3
@bacon
А ты пытался почитать документация, а просто погуглить? Тема базовая, разжёвана кучу раз, и даже не относиться к конкретному ЯП.
Ответ написан
@rPman
буферизация - это механизм откладывания действия (записи, вывода и т.п.) на потом, когда количество необходимой работы наберется до некоторого количества (например количество символов в кеш-буфере превысит его размер)

по окончанию работы программы буферы сбрасываются принудительно
Ответ написан
Комментировать
middle
@middle
Если вывод происходит в консоль, то Python использует построчную буферизацию, то есть буфер сбрасывается либо при переполнение, либо при получении символа перевода строки, и ещё в при закрытии файла при завершении программы.

Если заменить end на '\n', то числа появляются сразу. Иначе надо использовать flush.

Смысл буферизации в том, что системные вызовы - вещь накладная, и программа с буферизацией работает быстрее (хороший пример - всяческие фильтры, которые читают со stdin, обрабатывают и пишут в stdout).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы