Как печатать без перевода строки в 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=‘’) — базовый способ печати без переноса строки в Python
- sys.stdout.write и flush — непрерывный вывод без пробелов
- Особенности Python 2: запятая и from future
- Примеры: печать ‘…’ и индикатор прогресса
- Частые ошибки и советы
- Источники
- Заключение
Как работает print: параметры end и sep
Функция print по умолчанию добавляет перевод строки — параметр end равен '\n', а между несколько переданными аргументами вставляется пробел — sep=' '. Это очевидно из сигнатуры print(object(s), sep=..., end=..., file=..., flush=...) — см. справочник для справки: W3Schools.
Значит, чтобы получить вывод без новой строки, нужно переопределить end, а чтобы убрать пробелы — задать sep=''.
print(…, end=‘’) — базовый способ печати без переноса строки в Python
Самый простой и читаемый вариант — переопределить end:
for _ in range(10):
print('.', end='') # печатает точку, не переводя строку
print() # перевод строки в конце, чтобы вернуть приглашение
Если вы вызываете print с несколькими аргументами и не хотите пробелов между ними, укажите sep='':
print('.', '.', sep='') # выведет ".." без пробела
Когда вывод буферизуется (например, при перенаправлении в файл), точки могут не появляться мгновенно. Для немедленного отображения используйте flush=True (Python 3.3+):
print('.', end='', flush=True)
Подробнее о вариантах и дополнительных примерах — обзорные статьи: DataCamp и GeeksforGeeks.
sys.stdout.write и flush — непрерывный вывод без пробелов
Если нужен более низкоуровневый контроль, пишите напрямую в stdout:
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 на русском.
Примеры: печать ‘…’ и индикатор прогресса
- Непрерывные точки (самый простой случай):
import time
for _ in range(20):
print('.', end='', flush=True)
time.sleep(0.05)
print()
- То же через sys.stdout (работает и в Python 2/3):
import sys, time
for _ in range(20):
sys.stdout.write('.')
sys.stdout.flush()
time.sleep(0.05)
sys.stdout.write('\n')
- Индикатор прогресса на одной строке (используем возврат каретки ‘\r’):
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.
Источники
- Stack Overflow — How to print without a newline or space
- DataCamp — Python Print Without New Line
- GeeksforGeeks — How to Print without newline in Python?
- W3Schools — Python print() Function
- Stack Overflow на русском — Как убрать перевод строки при вызове print?
- Sky.pro — Секвенциальная печать в одну строку в скрипте (руководство)
- RTFM — Python: print без символа новой строки
- Pythobyte — Python: How to Print without Newline or Space
- FavTutor — Python: How to Print without newline (3 Methods)
- Guru99 (RU) — Python Новая строка: как печатать БЕЗ новой строки
Заключение
Коротко: для print без переноса строки в Python чаще всего используют print(..., end='') (а при необходимости sep='' для удаления пробелов). Если нужен мгновенный вывод — добавьте flush=True или вызов sys.stdout.flush(), а для полной точности управления используйте sys.stdout.write(). Простая комбинация print('.', end='', flush=True) даёт непрерывный вывод “…” быстро и удобно.