Задать вопрос
@artender

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

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

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

При его выполнении, программа сначала дожидается конца цикла, и только потом выводит результат каждой итерации целиком. Я знаю, что для мгновенного вывода нужно добавить параметр flush = True, но не понимаю в чем его смысл. Почему программа не выводит результат каждой итерации изначально, без всяких параметров? В чем преимущество вывода после окончания цикла?
  • Вопрос задан
  • 2708 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Python-разработчик
    9 месяцев
    Далее
  • SF Education
    Бэкенд-разработчик на Python
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 2
@rPman
буферизация - это механизм откладывания действия (записи, вывода и т.п.) на потом, когда количество необходимой работы наберется до некоторого количества (например количество символов в кеш-буфере превысит его размер)

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

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

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

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

Похожие вопросы