Сегодня разбираем одну из самых базовых функций в языке программирования Python — функцию вывода на экран — print()
. Она нужна для вывода пользователям результата работы программ, промежуточной отладки кода, управления компьютером через приём команд от пользователя и других полезных вещей.
Как это работает и как выглядит использование функции — разбираем дальше.
Что такое print в Python
В языке Python print()
означает вывод информации на экран. Всё, что вы видите в скобках после этой функции, будет где-то напечатано.
Где будет выведен текст и что он будет показывать, определяет программист. В статье мы покажем, как это может быть и что для этого используется.
Основное назначение функции print
Весь смысл этой функции — дать пользователям нужную информацию через текст. Print()
даёт использовать и вывод, и ввод, например если нужно ввести данные в нужное поле.
Эта функция печатает всё, что можно выразить через символы: буквы, цифры, специальные символы, результаты подсчёта математических выражений, тексты ошибок и исключений.
Самый простой пример: print("Hello, World")
Основной и базовый пример, с которого часто начинается обучение языкам программирования — вывод на экран текста Hello, World
.
В Python это делается программой из одной строки:
print("Hello, World!")
Код выводит текст в консоли среды разработки IDE или в терминале командной строки, если запускать программу оттуда:
Что ещё можно делать с этой функцией
Вариантов вывода информации на экран много. Как именно это будет выглядеть — зависит от логики программы и используемых инструментов. Вот несколько вариантов, где можно напечатать текст, кроме консоли.
В файлах. Можно научить программы записывать результаты работы приложения и всё сохранять в отдельный файл, который потом будет использован для анализа.
Пример — запись действующего списка астронавтов на МКС в программе, которая отслеживает местонахождение станции в реальном времени:
В графических интерфейсах (или GUI). Графический интерфейс покажет любой текст, который должен увидеть пользователь. Это может быть заготовленный разработчиками текст или сформированный в программе через работу программы.
Пример — тексты вопросов и варианты ответов в тестах программы подготовки к экзаменам, написанной с помощью библиотеки графического интерфейса PyQt5:
В играх. С функцией print()
есть возможность подписать название, главное меню, кнопки управления, сообщения от игры.
Так выглядит игра на Python, созданная с библиотекой PyGame:
Игру можно сделать прямо в консоли Python. Например, симулятор блекджека:
Не всегда текст обязательно выводится командой print()
, но, когда дело касается передачи информации через текст, это один из основных вариантов.
Синтаксис функции print
Python умеет принимать дополнительные параметры для этой функции. Они помогают выводить только нужную информацию, подставлять значения переменных или показывать информацию на экране аккуратно и удобно для восприятия.
Базовый синтаксис команды print
Основной синтаксис функции выглядит просто как текст в скобках внутри кавычек после ключевого слова print
:
print("Hello, World!")
Внутри скобок можно вообще ничего не указывать. Тогда Python напечатает пустую строку.
В предыдущей, второй версии Python, скобки были тоже не нужны, поэтому в некоторых статьях до сих пор можно увидеть вариант без них: print "Hello, World!"
. Но сейчас во всех современных программах используется третья версия языка, поэтому сегодня мы пишем эту команду со скобками.
Вот все основные варианты, как передавать значения в print() для вывода на экран.
Строки передаются в двойных скобках. Так же мы печатаем слова Hello, World
:
print("Привет, КОД!")
Числа передаются без скобок, в том виде, как есть:
print(42)
Переменные выводят на экран своё содержимое. Если в переменной хранится число, print() выведет число, если там кортеж или набор данных — Python покажет их.
Например, при работе с данными можно сохранить датасет и вывести его в виде таблицы. Так будет выглядеть начало набора данных о рецензиях на фильмы с Rotten Tomatoes:
Математическое или строковое выражение можно использовать, если прописать в качестве ключевого аргумента функции какое-то действие. Например, подсчёт чисел:
print("Сумма:", sum([2, 4, 6]))
Перед выводом функция сложит все числа и выведет результат.
Сумма: 12
Можно попросить программу сделать внутри print()
что-то со строкой. Код ниже приводит все буквы к верхнему регистру и объединяет отдельные слова в одно, так что они будут выведены без пробелов:
print("полный шума и ярости, значащий ничего".upper().replace(" ", ""))
При запуске в консоли увидим:
ПОЛНЫЙШУМАИЯРОСТИ,ЗНАЧАЩИЙНИЧЕГО
Вывод сложных структур — коллекций элементов — работает так же, как вывод переменных. Коллекции объединяют несколько элементов в один. Например, список может включать элементы любого типа:
print([1984, "Над пропастью во ржи", {"Dracula": "Prince of Darkness"}, ["Список", "Шиндлера"]])
Команда выше выведет список как строку с сохранением синтаксиса элементов:
[1984, 'Над пропастью во ржи', {'Dracula': 'Prince of Darkness'}, ['Список', 'Шиндлера']]
Вывод нескольких аргументов
С помощью print()
Python может вывести любое количество аргументов, если их перечислить через запятую. В предыдущем примере со сложными структурами мы просим напечатать несколько объектов разного формата, и компьютер выводит их в том же порядке, как мы указали.
Дополнительные параметры print
Функцию можно гибко настраивать, потому что, кроме объектов вывода, в ней есть дополнительные параметры. В полном виде print()
выглядит так:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
Что делает каждый из этих аргументов, разберём отдельно.
Параметр objects
Основной аргумент, в который мы передаём то, что хотим показать на экране пользователю. Аргумент основной, но необязательный — обязательных аргументов в функции нет вообще.
Выводим набор символов:
print("P", "y", "t", "h", "o", "n")
Что будет в консоли:
P y t h o n
Параметр sep
В примере выше мы получили такой результат:
P y t h o n
Буквы разделены пробелом, потому что по умолчанию указанные для вывода символы разделяются этим символом. Чтобы изменить это, нужно явно указать значение sep
.
Примеры использования sep
Параметр указывают после перечисления объектов для вывода:
print("screen", 22, 44, sep="🎉")
Теперь при запуске кода объекты будут разделены через эмодзи:
scren🎉22🎉44
Как изменить разделитель между аргументами
Sep
нужно указывать каждый раз отдельно. Если Питону не сказать, как мы хотим разделять объекты вывода, он всегда будет брать значение по умолчанию — пробел.
Параметр end
Cимвол в конце вывода. По умолчанию это переход на новую строку, чтобы новый вывод печатался с новой строки.
Для чего нужен параметр end
От end
зависит, как поведёт себя вывод в конце. Изменяя его, можно по-разному обозначать конец вывода.
Вот два примера. Первый — со стандартным выводом, когда в конце строки ставится символ '\n'
для перевода на следующую строку. Во втором примере мы укажем, что в качестве end
хотим видеть пробел. Тогда print()
выведет всё в одну строку.
Между этими двумя примерами вставим print()
без аргументов — это будет пустая строка для разделения:
# вывод в две строки
print("Загрузка...")
print("50%")
# добавляем пустую строку для разделения
print()
# вывод в одну строку
print("Used...", end=" ")
print("50%")
Запускаем код и видим два разных варианта:
Used...
50%
Used... 50%
Как убрать перенос строки в print
Чтобы убрать перенос и сделать вывод в одну строку, в каждом отдельном print()
нужно явно указывать пробел или пустую строку в качестве параметра end
.
Либо так:
end=" "
Либо так, когда после одной строки сразу начнётся вывод следующей:
end=""
Параметр file
Здесь указываем, куда выводить печать. Вариант по умолчанию правильно называется sys.stdout
, или «стандартный поток вывода». На деле это значит, что без указания этого параметра print()
связана с консолью (терминалом), и именно там мы увидим все выводы.
Чтобы использовать этот параметр, проще всего добавить контекстный менеджер и позволить ему сделать всю работу. Контекстный менеджер — это короткие команды, которые под капотом имеют инструкции о том, что надо делать.
Например, конструкция with open
откроет файл для записи, а если его не существует в указанной папке — создаст его там. У нас в примере папка не указана, поэтому Python создаст файл в корневой папке с проектом:
with open("file_for_string.txt", "w") as f:
print("Эта строка будет записана в файл", file=f)
Теперь в этой папке появится файл, внутри которого будет одна строка:
Параметр flush
Сброс буфера вывода.
По умолчанию flush
выставлен на False
. Это значит, что вывод в консоль буферизируется: данные могут накапливаться в памяти перед тем, как попасть на экран. Если поменять параметр и выставить его на True, вывод можно будет видеть сразу же, как только он происходит по логике программы.
Звучит сложно, поэтому эту часть объясним на примерах с иллюстрациями.
Используем такую программу:
import time
with open("test_output.txt", "w") as f:
for i in range(10):
print("Строка ", i, file=f)
time.sleep(1)
Здесь мы импортируем модуль time
и заполняем новый файл 10 строками. Каждую строку записываем в файл с разницей в секунду.
Для эксперимента понадобятся два окна командной строки. В обоих нужно перейти в директорию проекта. В правом окне мы отслеживаем происходящее внутри файла test_output.txt
в реальном времени, используя команду tail -f test_output.txt
. В левом окне запускаем код, в правом — смотрим результат:
В этом примере мы не меняли flush
, поэтому сброс буферизации отключён. Строки накапливаются в буфере и появляются одновременно в конце работы программы.
Теперь изменим код и явно включим сброс буфера:
import time
with open("test_output.txt", "w") as f:
for i in range(10):
# отключаем буферизацию
print("Строка ", i, file=f, flush=True)
time.sleep(1)
Перед повторным запуском нужно или удалить файл, или зайти в него и стереть уже готовые строки. Теперь заново запускаем два терминала и включаем программу. Видно, что строки записываются в реальном времени каждую секунду:
Практические примеры использования print
Вот ещё несколько примеров для закрепления.
Комбинирование sep и end
Можно объединять использование разделителя строки и окончания. Например, для создания вывода, похожего на таблицу:
print("Имя", "Возраст", sep=" | ", end=" *** ")
print("Аня", 22, sep=" | ")
Запускаем код и получаем такой результат в одну строку:
Имя | Возраст *** Аня | 22
Форматированный вывод с print
Переменные для вывода можно указывать прямо внутри кавычек. Для этого перед строкой нужно поставить букву f
.
С переменными внутри кавычек можно работать так же, как в обычном коде. Например, оставить только два знака после точки в дробном числе:
# задаём переменные
name = "Саша"
score = 95.6789
# выводим на экран внутри кавычек
print(f"name: {name}")
# оставляем 2 знака после точки
print(f"parameter: {score:.2f}")
В консоли появится:
name: Саша
parameter: 95.68
Частые вопросы
Чем отличается sep от end?
Sep
— разделитель между объектами, а end
обозначает конец строки. По умолчанию в качестве sep
применяется пробел, а для end
— перенос на новую строку.
Как вывести данные без пробелов между аргументами?
Нужно указать вместо sep пустую строку, например:
print("f", "u", "n", "c", "t", "i", "o", "n" sep="")
Этот код напечатает слово без пробелов:
function
Как сделать, чтобы print не переносил строку?
Для этого должен использоваться изменённый параметр end
:
print("Прогресс:", end="")
for i in range(3):
# теперь всё будет на одной строке
print(".", end="")
Теперь результатом будет одна строка без переносов:
Прогресс:...
Бонус для читателей
Если вам интересно погрузиться в мир ИТ и при этом немного сэкономить, держите наш промокод на курсы Практикума. Он даст вам скидку при оплате, поможет с льготной ипотекой и даст безлимит на маркетплейсах. Ладно, окей, это просто скидка, без остального, но хорошая.
Вам слово
Приходите к нам в соцсети поделиться своим мнением о функции print() и почитать, что пишут другие. А ещё там выходит дополнительный контент, которого нет на сайте — шпаргалки, опросы и разная дурка. В общем, вот тележка, вот ВК — велком!