Программирование

Как печатать без перевода строки в Python: end=''

Как в Python печатать без перевода строки или пробела: print(end=''), sys.stdout.write(), flush для непрерывного вывода '....'. Примеры для Python 2/3, индикатор прогресса и избежание ошибок.

Как печатать без перевода строки или пробела в Python: создание непрерывного вывода типа ‘…’ вместо отдельных точек или переводов строк

Чтобы в Python печатать без перевода строки и без пробелов используйте параметр end у print (например, print('.', end='')) или напрямую записывайте в поток sys.stdout.write() с последующим sys.stdout.flush(). Для удаления пробелов между аргументами задайте sep='', а для немедленного отображения — flush=True или ручной sys.stdout.flush().


Содержание


Как работает print: параметры end и sep

Функция print по умолчанию добавляет перевод строки — параметр end равен '\n', а между несколько переданными аргументами вставляется пробел — sep=' '. Это очевидно из сигнатуры print(object(s), sep=..., end=..., file=..., flush=...) — см. справочник для справки: W3Schools.
Значит, чтобы получить вывод без новой строки, нужно переопределить end, а чтобы убрать пробелы — задать sep=''.


Самый простой и читаемый вариант — переопределить end:

python
for _ in range(10):
 print('.', end='') # печатает точку, не переводя строку
print() # перевод строки в конце, чтобы вернуть приглашение

Если вы вызываете print с несколькими аргументами и не хотите пробелов между ними, укажите sep='':

python
print('.', '.', sep='') # выведет ".." без пробела

Когда вывод буферизуется (например, при перенаправлении в файл), точки могут не появляться мгновенно. Для немедленного отображения используйте flush=True (Python 3.3+):

python
print('.', end='', flush=True)

Подробнее о вариантах и дополнительных примерах — обзорные статьи: DataCamp и GeeksforGeeks.


sys.stdout.write и flush — непрерывный вывод без пробелов

Если нужен более низкоуровневый контроль, пишите напрямую в stdout:

python
import sys, time

for _ in range(10):
 sys.stdout.write('.') # не добавляет ни пробела, ни новой строки
 sys.stdout.flush() # сбрасываем буфер вручную
 time.sleep(0.1)
sys.stdout.write('\n')

sys.stdout.write() принимает строку (не делает автоматического преобразования объектов в str), зато не вносит дополнительных символов. Подходит для индикаторов прогресса и ситуаций, когда важна производительность. Обсуждение разных подходов можно найти на Stack Overflow.


Особенности Python 2: запятая и from future

В Python 2 был старый трюк с запятой: print '.' , — он подавляет перевод строки, но оставляет пробел между элементами и добавляет пробел в конце. Это не всегда то, что нужно.

Лучше использовать:

  • from __future__ import print_function — тогда в Python 2 будет доступна версия print из Python 3 (и end='' заработает);
  • или sys.stdout.write() для полного контроля.

Сравнение и практические примеры на русском — см. обсуждение на Stack Overflow на русском.


Примеры: печать ‘…’ и индикатор прогресса

  1. Непрерывные точки (самый простой случай):
python
import time

for _ in range(20):
 print('.', end='', flush=True)
 time.sleep(0.05)
print()
  1. То же через sys.stdout (работает и в Python 2/3):
python
import sys, time

for _ in range(20):
 sys.stdout.write('.')
 sys.stdout.flush()
 time.sleep(0.05)
sys.stdout.write('\n')
  1. Индикатор прогресса на одной строке (используем возврат каретки ‘\r’):
python
import sys, time

for i in range(101):
 sys.stdout.write('\rProgress: {}%'.format(i))
 sys.stdout.flush()
 time.sleep(0.02)
print() # для перехода на новую строку после завершения

Нужна ли вам анимация или просто серия точек — выбор способа одинаков: print(..., end='') проще; sys.stdout.write() даёт больше контроля.


Частые ошибки и советы

  • Забыли flush — при перенаправлении вывода или в некоторых терминалах данные будут буферизоваться. Решение: flush=True или sys.stdout.flush().
  • Нет финального print() — в интерактивной сессии приглашение может “слипнуться” с последним символом вывода. Добавьте одну пустую print() в конце.
  • Ожидали, что print '.' , в Python 2 не даст пробелов — даст. Для отсутствия пробелов используйте sep='' или sys.stdout.write().
  • Пытались писать нестроковый объект через sys.stdout.write — нужно привести к строке: sys.stdout.write(str(obj)).
  • Смешивание print и sys.stdout.write может выглядеть неконсистентно; для простых задач предпочитайте print(..., end='').

Если хочется подробной пошаговой инструкции — полезны статьи с практическими примерами и разбором поведения в разных версиях Python: DataCamp и GeeksforGeeks.


Источники

  1. Stack Overflow — How to print without a newline or space
  2. DataCamp — Python Print Without New Line
  3. GeeksforGeeks — How to Print without newline in Python?
  4. W3Schools — Python print() Function
  5. Stack Overflow на русском — Как убрать перевод строки при вызове print?
  6. Sky.pro — Секвенциальная печать в одну строку в скрипте (руководство)
  7. RTFM — Python: print без символа новой строки
  8. Pythobyte — Python: How to Print without Newline or Space
  9. FavTutor — Python: How to Print without newline (3 Methods)
  10. Guru99 (RU) — Python Новая строка: как печатать БЕЗ новой строки

Заключение

Коротко: для print без переноса строки в Python чаще всего используют print(..., end='') (а при необходимости sep='' для удаления пробелов). Если нужен мгновенный вывод — добавьте flush=True или вызов sys.stdout.flush(), а для полной точности управления используйте sys.stdout.write(). Простая комбинация print('.', end='', flush=True) даёт непрерывный вывод “…” быстро и удобно.

Авторы
Проверено модерацией
Модерация
Как печатать без перевода строки в Python: end=''