Функция print считается главным инструментом обучения программированию. Именно на ее примере демонстрируется вывод данных в Python. Многие ошибочно считают, что в этой, казалось бы, простой на первый взгляд функции, нет ничего такого, что можно было бы раскрывать детальнее. Но на деле это не так. После того, как пользователь переходит к более сложным темам, об этой функции очень часто вообще забывает. Тем не менее, нужно раскрыть основные аспекты работы с ней. Мы разберемся, как выводить фразу Hello, World, а также разберем ряд других важных вопросов.
Работа с функцией Print
Итак, для вывода фразы Hello, World! нужно ввести такую строку.
print("Hello, World!") Hello, World!
Во второй версии Python можно отказаться от использования скобок. А вот в третьей они нужны. Если не применять их, появляется исключение SyntaxError.
File "<ipython-input-6-a1fcabcd869c>", line 1 print "Hello, World!" ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello, World!")?
Из этого вывода можно сделать умозаключение, что в 3-й версии Python print() – это функция, в то время как во второй – инструкция. Чтобы удостовериться в этом, необходимо проверить type/class функции print().
type(print) builtin_function_or_method
Этот вывод означает, что это встроенная функция Python (либо же ранее определенная). Допустим, необходимо добавить перенос строки/вертикальный отступ, для чего применяется функция print() без аргументов.
print("Hello, World!");print("Hello, World!") Hello, World! Hello, World! print("Hello, World!") print() print("Hello, World!") Hello, World! Hello, World!
Мы привели два фрагмента кода для сравнения. В первом случае выводится последовательно две строки, без отступа. Во втором – с ним.
На первый взгляд кажется, что функция print() не содержит никаких аргументов, кроме текстовой строки. Но нет, просто есть ряд необязательных.
print(value, ..., sep='', end='\n', file=sys.stdout, flush=False)
Насколько вы знаете, эта функция выводит значения в поток данных или в sys.stdout по умолчанию. sys.stdout или стандартный вывод системы говорят о том, что функция print выводит значение на экран. Его можно заменить на stdin или stderr.
Необязательные аргументы
sep
Это разделитель между значениями, который может вставляться между значениями. Давайте вставим список слов в print, а потом сделаем в качестве разделителя знак новой строки. Повторим: стандартный разделитель – это пробел. Если не указывать эту функцию, то между словами именно он и добавится.
print('туториал', 'по', 'функции', 'print()') туториал по функции print() # \n перенесет каждое слово на новую строку print('туториал', 'по', 'функции', 'print()', sep='\n') туториал по функции print()
Кроме этого, можно осуществить разделение слов с использованием запятых или добавить два знака новой строки \n, следствием чего будет появление пустой строки между текстовыми строками. Или же, знак + можно применить в качестве разделителя.
print('туториал', 'по', 'функции', 'print()', sep=',') туториал,по,функции,print() print('туториал', 'по', 'функции', 'print()', sep='\n\n') туториал по функции print() print('туториал', 'по', 'функции', 'print()', sep=',+') туториал,+по,+функции,+print()
Перед тем, как мы перейдем к следующему аргументу end, необходимо учесть, что в функцию передается и переменная. Например, определим список, включающий целые числа и вставим его в функцию pass. После того, как мы запустим код, этот список и будет выводиться в командную строку.
end
Это текст, который добавляется после последнего значения. Значение по умолчанию – перенос на новую строку \n. Это означает, что если будет вторая функция print, она выведет строку с новой строки, если не будет задано иного. И вот с использованием аргумента end это «иное» можно задать.
Допустим, есть две строки, а создателю приложения нужно объединить их, оставив между ними пробел. Тогда надо в первой функции print записать первую строку, str1 и аргумент end с кавычками. Тогда на экране будет две строки с пробелом между ними.
str1 = 'туториал по' str2 = 'функции print()' print(str1) print(str2) туториал по функции print() print(str1, end=' ') print(str2) туториал по функции print()
А теперь давайте приведем другой пример, в котором есть функция, которая выводит значения списка на одной строке. Чтобы это сделать, необходимо воспользоваться следующим значением аргумента end.
def value(items): for item in items: print(item, end=' ') value([1,2,3,4]) 1 2 3 4
file
Здесь содержится файлоподобный объект. По умолчанию таковым является sys.stdout. Здесь можно указать файл, в который должна осуществляться запись данных или же их добавление из функции.
Таким образом, вывод этой функции можно сохранять в файлы, что очень удобно, например, для отладки приложения и формирования логов.
Давайте рассмотрим это на примере с перебором всех элементов списка. Он сохраняется в файле текстового формата. В первую очередь открытие этого документа должно осуществляться в формате append. Затем мы определяем функцию, чей вывод будет добавляться внутрь.
file = open('print.txt','a+') def value(items): for item in items: print(item, file=file) file.close() # закройте файл после работы с ним. value([1,2,3,4,5,6,7,8,9,10])
По окончании исполнения программы, в текущей папке появится файл с названием print.txt.
Теперь мы видим, что эта функция не всегда используется для вывода текста на экран. Более того, когда будут создаваться графические интерфейсы, то будут использоваться совсем другие инструменты. А вот запись логов приложения в текстовый файл – это очень удобный вариант использования этой функции, который будет полезен всегда по ходу исполнения программы.
flush
Этот аргумент определяет, необходима ли принудительная очистка потока. Значение по умолчанию – False. Обычно вывод в файл либо в консоль буферизируется, пока не напишется знак новой строки. Как это интерпретировать? То, что вывод хранится в специальном регистре, пока документ не будет готовым к сохранению значения либо не окажется закрытым. И с использованием аргумента flush разработчик может убедиться, что буферизированный вывод благополучно добрался до точки назначения.
import time print('Пожалуйста, введите ваш электронный адрес : ', end=' ') # print('Пожалуйста, введите ваш электронный адрес : ', end=' ', flush=True) # запустите код выше, чтобы увидеть разницу. time.sleep(5) Пожалуйста, введите ваш электронный адрес :
Что будет, если запустить этот код? Вы обнаружите, что строка с запросом на вход не будет появляться до того момента, пока не будет закрыта программа после окончания таймера. А вот если добавить аргумент flush=True, то строка отобразится сразу, но чтобы программа закрылась, придется подождать 5 секунд.
Правда, лучше работать с этой функцией в командной строке, а не в Jupyter Notebook, поскольку последний все равно показывает текст перед 5-секундным таймером. Поэтому чтобы проверить эту особенность, рекомендуется все же пользоваться консолью.
А теперь давайте посмотрим, каким образом используется функция print для получения ввода от пользователя Jupyter Notebook. Чтобы это сделать, мы применим встроенную функцию input().
tutorial_topic = input() print("Тема сегодняшнего урока: ", end='') print(tutorial_topic) функция print() Тема сегодняшнего урока: функция print()
Обратите внимание: здесь используется дополнительный аргумент end, объединяющий статическую инструкцию в print и ввод пользователя.
Давайте теперь рассмотрим другие любопытные методы ввода значений переменных в функции print.
1. Чтобы значение отображалось вместе с определенной строкой, необходимо между ними добавить запятые. В таком случае положение строки и переменной значения не имеет.
a = 2 b = "PythonRU" print(a,"— целое число, а",b,"— строка.") 2 — целое число, а PythonRU — строка.
2. Также возможно использование метода format, передавая ему какие-угодно значения переменных, которые используются для вывода. При их передаче необходимо указывать номера индексов (в той последовательности, в которой они размещаются в аргументе) в строке. В этом случае функция print будет работать, как шаблон.
Также необходимо помнить, что номера индексов мы всегда указываем в фигурных скобках, выступающих заполнителем.
Давайте эту особенность продемонстрируем на примере.
a = 2 b = "PythonRU" print("{0} — целое число, а {1} — строка.".format(a,b))
Если мы поставим тот же самый номер индекса во всех местах, то одни и те же значения будут отображаться в выводе на этих местах.
a = 2 b = "PythonRU" print("{1} — целое число, а {1} — строка.".format(a,b)) PythonRU — целое число, а PythonRU — строка.
3. Вместо аргумента format многие разработчики также используют символ процента %, чтобы выводить значения переменных.
Этот метод также основывается на принципе заполнителей. Правда, здесь нет необходимости указывать номера индексов, а лишь обозначить тип данных, которые получит функция.
%d — это заполнитель для числовых или десятичных значений.
%s — заполнитель для строк.
Вывод
Мы разобрались в основных аспектах того, что нужно знать для работы с функцией print() в Python. Как видим, ничего сложного в этом нет. Если вы новичок и хотите добиться высокого уровня профессионализма, использование приведенных здесь рекомендаций вам здорово поможет. Попробуйте потренироваться использовать эту функцию для разных задач. Без практики хорошего обучения не выйдет.