Модуль 1 · Данные и имена

Справочник по Python · модуль 1 · данные и имена

Глава 1.4

1.4

Параметры print():
sep и end

В прошлой главе print() дважды повёл себя «сам»: поставил пробел между значениями и перевёл строку в конце. И то и другое — не жёсткое правило, а значения по умолчанию, которые вы можете задать иначе.

Категория
Синтаксис и базовые концепции
Уровень
Начальный
Связанные темы
Вывод данных, строки, циклы
Зачем это знать
Управлять форматом вывода и собирать результат в одну строку

§1Параметры со значением по умолчанию

Кроме самих значений print() принимает именованные параметры — их передают по имени, через знак =, после всех выводимых значений. Два из них нужны постоянно:

ПараметрЗа что отвечаетЗначение по умолчанию
sepчто ставится между значениями" " — пробел
endчто ставится в конце вывода"\n" — перевод строки

Значение по умолчанию — это то, что подставляется, когда вы параметр не указали. Поэтому print(a, b) и print(a, b, sep=" ", end="\n") работают одинаково: во втором случае значения параметров указаны явно.

§2sep — разделитель между значениями

Параметр sep (от separator) задаёт, чем разделяются значения, перечисленные через запятую.

main.pyбез sep — разделитель по умолчанию
print("яблоко", "бабочки", "огурцы")
Вывод в терминалрезультат запуска
яблоко бабочки огурцы
main.pyсвой разделитель
print("яблоко", "бабочки", "огурцы", sep="!! ")
Вывод в терминалрезультат запуска
яблоко!! бабочки!! огурцы

Разделителем может быть любая строка — символ, несколько символов или вообще пустая строка. Обратите внимание: он ставится только между значениями, но не в начале и не в конце.

main.pyещё варианты
print(1, 2, 3, sep=" - ")     # 1 - 2 - 3
print("а", "б", "в", sep="")     # абв — без разделителя
print(2026, 9, 4, sep=".")      # 2026.9.4

Последняя строка — типичное применение: собрать дату, путь или список через один и тот же знак, не расставляя его руками между каждой парой значений.

§3end — чем заканчивается вывод

Параметр end задаёт, что будет добавлено после всего выведенного. По умолчанию это перевод строки — поэтому каждый следующий print() начинается с новой строки.

main.pyобычное поведение
print("Hello")
print("world")
Вывод в терминалдве строки
Hello
world

Заменим перевод строки на пустую строку — и переноса не будет: следующий вывод продолжится там же, где закончился предыдущий.

main.pyend=""
print("Hello, ", end="")
print("world!")
Вывод в терминалодна строка
Hello, world!

В end можно положить не только пустую строку, но и любой текст — например, пробел:

main.pyтри вызова — одна строка
print("Python", end=" ")
print("Java", end=" ")
print("C++")
Вывод в терминалрезультат запуска
Python Java C++

Заметьте: у последнего вызова end не задан. Он-то и переводит строку, завершая вывод. Если убрать перенос и у него, следующий вывод — или приглашение терминала — прилипнет к вашему тексту.

§4Что такое \n

Запись "\n" выглядит как два символа, но означает один — перевод строки. Обратный слеш здесь начинает управляющую последовательность: сочетание, которым записывают символ, не имеющий видимого начертания.

ЗаписьЧто означает
\nперевод строки — то, что происходит при нажатии Enter
\tтабуляция, отступ до следующей позиции колонки
\\сам обратный слеш
\"кавычка внутри строки в таких же кавычках

Использовать их можно где угодно, не только в параметрах. Например, вывести каждое значение с новой строки одним вызовом:

main.pyперевод строки как разделитель
print(1, 2, 3, sep="\n")
Вывод в терминалрезультат запуска
1
2
3

§5sep и end вместе

Оба параметра передаются в одном вызове, порядок между ними неважен — они именованные. Важно другое: сначала перечисляются все выводимые значения, и только потом идут параметры.

Синтаксисполная форма вызова
print(значение1, значение2, sep="разделитель", end="окончание")
main.pyоба параметра сразу
print("итого", 4395, sep=": ", end=" руб.\n")
Вывод в терминалрезультат запуска
итого: 4395 руб.

Не увлекайтесь: тот же результат короче и понятнее даёт f-строка — print(f"итого: {total} руб."). Параметры sep и end хороши не для украшения одной строки, а там, где значений много или вывод собирается из нескольких вызовов.

§6Разбор задачи: вывод в строку

Настоящая польза от end видна, когда вызовов много и они идут не подряд в коде, а, например, в цикле. Циклы мы разберём в модуле 2, но идея видна и на трёх строках: без end="" каждый вывод занимал бы свою строку экрана, с ним — все складываются в одну.

main.pyшкала загрузки
print("Загрузка: ", end="")
print("#", end="")
print("#", end="")
print("#", end="")
print(" готово")
Вывод в терминалрезультат запуска
Загрузка: ### готово

Второй частый случай — sep для табличного вывода, где разделитель одинаков для всех колонок:

main.pyстрока отчёта
print("Иванов", "Python", 5, sep=" | ")
print("Петров", "Python", 4, sep=" | ")
Вывод в терминалрезультат запуска
Иванов | Python | 5
Петров | Python | 4
На полях: как выбрать между sep и f-строкой

Если разделитель одинаков для всех значений и их много — берите sep: один параметр вместо повторяющегося текста. Если между значениями разный текст — «Имя: …, возраст: …» — берите f-строку. Смешивать оба подхода в одном выводе можно, но читать такую строку тяжело.

§7Частые ошибки

Что написаноЧто произойдётКак правильно
print(1, 2, sep = ", ", 3)SyntaxError — значение стоит после именованного параметрасначала все значения, потом параметры: print(1, 2, 3, sep=", ")
print("a", "b", sep)NameError — sep без = читается как имя переменнойprint("a", "b", sep="-")
print("a", "b", end) вместо end=""то же самое: NameErrorу именованного параметра всегда есть = и значение
print("Загрузка", end="") и больше ничеготекст останется в одной строке с приглашением терминалазавершить вывод обычным print()
print("C:\name")выведет перевод строки: \n внутри пути сработал как управляющая последовательностьудвоить слеш: "C:\\name"
print("a", "b", sep=", ", sep=" ")SyntaxError — параметр указан дваждыоставить одно значение sep

§8Проверьте себя

Что выведет print("a", "b", "c", sep="")?

abc. Пустая строка в качестве разделителя означает, что между значениями не ставится ничего. Перевод строки в конце при этом остаётся: за него отвечает end, а он не менялся.

Сколько строк займёт вывод: print("Hello", end=" "), затем print("world")?

Одну: Hello world. Первый вызов закончился пробелом вместо переноса, поэтому второй продолжил ту же строку и уже сам её завершил.

Чем отличается print(1, 2, 3, sep="\n") от трёх отдельных вызовов print(1), print(2), print(3)?

На экране — ничем, результат одинаковый: три строки. Отличие в коде: один вызов вместо трёх. Так удобно выводить набор значений, который у вас уже есть под рукой.

Почему в print("Python", end=" "), print("Java", end=" "), print("C++") у последнего вызова не задан end?

Потому что вывод нужно завершить переносом строки — иначе следующий текст в консоли прилипнет к C++. У последнего вызова end оставляют по умолчанию именно для этого.

Задача для практики: вывести дату 04.09.2026, имея три переменные — day = 4, month = 9, year = 2026.

Через sep: print(day, month, year, sep=".") — но получится 4.9.2026, без ведущих нулей. Чтобы вышло ровно 04.09.2026, нужна f-строка с указанием ширины: print(f"{day:02d}.{month:02d}.{year}"). Хороший пример того, где sep уже не хватает.

§9Шпаргалка

Значения по умолчанию sep=" " между значениями end="\n" в конце вывода
Свой разделитель print(1, 2, 3, sep=" - ") # 1 - 2 - 3
Без разделителя print("а", "б", sep="") # аб
Вывод в одну строку print("Hello, ", end="") print("world!")
Каждое с новой строки print(1, 2, 3, sep="\n")
Управляющие символы \n перевод строки \t табуляция \\ сам слеш

Итог главы

У print() есть два параметра, которые обычно не указывают, потому что их значения по умолчанию подходят: sep=" " ставит пробел между значениями, end="\n" переводит строку в конце. Задав их явно, вы управляете форматом вывода: собираете дату через точку, печатаете значения столбиком или склеиваете несколько вызовов в одну строку. Для текста с разными подписями по-прежнему удобнее f-строка — sep и end берут своё там, где формат однороден.

Глава 1.4 · Параметры print(): sep и end · Справочник по Python Автор: Макаров Максим Николаевич