Секвенциальная печать в одну строку в скрипте: как решить

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Python 3 и более новые версии: используйте print(…, end='') для этого. Параметр end='' позволяет не выполнять автоматического перехода на новую строку после вывода.

Python
Скопировать код
print("Привет", end=' ')
print("Мир")

Таким образом, результат: Привет Мир будет выведен в одну строчку. Наслаждайтесь! 🐳

Кинга Идем в IT: пошаговый план для смены профессии

Вывод без перехода на новую строку в Python 3

В Python 3, параметр end функции print() указывает, какой символ будет добавляться в конце каждого вывода. По умолчанию используется символ \n, что означает переход на новую строку. Если необходимо осуществить вывод без перехода на новую строку, используйте пустую строку в качестве end ('').

Python
Скопировать код
print("Первый вызов print", end='')
print(" Второй вызов print")

Опция flush функции print в Python 3

Функция print() по умолчанию буферизует вывод, из-за чего при итеративном выводе могут возникать задержки. Для немедленной очистки буфера можно использовать параметр flush=True.

Python
Скопировать код
print("Обработка...", end="", flush=True)

Так, проблемы с буферизацией никогда не заставят вас ждать! 💪

Вывод без перехода на новую строку в Python 2

Если вы работаете с Python 2, то для удаления автоматического перевода на новую строку достаточно добавить запятую в конце оператора print.

Python
Скопировать код
print "Обработка...",

Таким образом удаляется переход на новую строку, одновременно добавляя пробел в конце, как выражение того, что Python 2 говорит нам: "Примите это, как компенсацию за непередовую версию".

Применение sys.stdout.write()

Для полного контроля над выводом, а также чтобы предотвратить добавление пробела в Python 2, следует использовать sys.stdout.write(). Для немедленного вывода результата примените sys.stdout.flush().

Python
Скопировать код
import sys
sys.stdout.write("Обработка...")
sys.stdout.flush()

Возврат каретки для перезаписи последнего вывода

Символ возврата каретки ("\r") позволяет перезаписать последний вывод. Это особенно полезно при создании индикаторов выполнения задач или анимированных часов.

Python
Скопировать код
print("3...2...1... Подождите, давайте начнем снова!", end="\r")

Это словно карточка из "Монополии" — "Выйдите из тюрьмы бесплатно", когда нужно быстро исправить ошибку.

Визуализация

Каждый вызов функции print() можно сравнить с добавлением товара в корзину покупок 🛒. Применение параметра end аналогично заданию: "Я ещё не завершил!"

Python
Скопировать код
print("🍏", end='') # Добавляем в корзину яблоко
print("🍌", end='') # Кладём в корзину банан, но пока не заканчиваем покупки
print("🍓")        # И в завершение добавляем клубнику – покупки совершены

Такой процесс покупок выглядит следующим образом:

Markdown
Скопировать код
Изначально: 🛒
Шаг 1:      🛒🍏
Шаг 2:      🛒🍏🍌
Результат:  🛒🍏🍌🍓

Использование символа "забой" при выводе

При посимвольном выводе вы можете использовать '\x08' для возвращения на шаг назад. Это схоже с действием Ctrl + Z при программировании.

Python
Скопировать код
import time
print("Загрузка", end='')
for _ in range(10):
    print('.', end='', flush=True)
    time.sleep(0.5) # Отдыхаем полсекунды
    print('\x08', end='', flush=True) # Упс, ошибка! Используем забой

Создание пользовательских последовательностей вывода

Если функционал print() не обеспечивает необходимый уровень контроля, используйте sys.stdout.write() и '\r' для создания своих собственных последовательностей вывода.

Python
Скопировать код
import sys
sys.stdout.write("Загрузка...\r")

Полезные материалы

  1. Your Guide to the Python print() Function – Real Python — подробное руководство по функции print() в Python.
  2. sys — System-specific parameters and functions — Python 3.12.2 documentation — официальная документация для sys.stdout в Python.
  3. time — Time access and conversions — Python 3.12.2 documentation — информация о работе со временем в Python.
  4. Python String format() Method — описание метода format() для строк в Python.
  5. PEP 498 – Literal String Interpolation — информация об использовании f-строк в Python.
  6. Python end parameter in print() – GeeksforGeeks — описание параметра end функции print() в Python.