Print() – наверное, самая первая команда, с которой сталкивается новичок при изучении Python с нуля. Почти все начинают с вывода на экран простого приветствия и переходят к дальнейшему изучению синтаксиса, функций и методов языка, не задумываясь о дополнительных возможностях print(). Однако в Python 3 эта команда предоставляет доступ к базовой функции вывода данных с присущими ей параметрами и возможностями. Знание этих особенностей позволит оптимизировать вывод данных для каждого конкретного случая.
Преимущества функции print() в Python 3
В третьей версии Python print() входит в базовый набор функций. При выполнении проверки type(print) выводится информация: class ‘builtin_function_or_method‘. Слово builtin указывает на то, что проверяемая функция встроенная.
В Python 3 выводимые объекты (objects) помещают в скобках после слова print. На примере вывода традиционного приветствия это будет выглядеть так:
Для Python 3: print(‘Hello, World!’).
В Python 2 оператор применяется без скобок: print ‘Hello, World!’
Результат в обеих версиях будет одинаковый: Hello, World!
Если во второй версии Python значения после print поместить в скобки, тогда выведен будет кортеж – тип данных, представляющий собой неизменяемый список:
print(1, ‘first’, 2, ‘second’)
(1, ‘ first’, 2, ‘ second ‘)
При попытке убрать скобки после print в третьей версии Python, программа выдаст синтаксическую ошибку.
print("Hello, World!")
File "<ipython-input-6-a1fcabcd869c>", line 1 print "Hello, World!" ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello, World!")?
Особенности синтаксиса print() в Python 3
Синтаксис функции print() включает собственно объект или объекты (objects), которые также могут называться значениями (values) или элементами (items), и несколько параметров. То, как именно будут выводиться объекты, определяется четырьмя именованными аргументами: разделителем элементов (sep), строкой, выводимой после всех объектов (end), файлом, куда выводятся данные (file), и параметром, отвечающим за буферизацию вывода (flush).
print(value, ..., sep='', end='\n', file=sys.stdout, flush=False)
Вызов функции возможен без указания значений параметров и даже без каких-либо объектов: print(). В этом случае задействованы параметры по умолчанию, и при отсутствии элементов выведется неотображаемый символ пустой строки – фактически, значение параметра end – ‘\n‘. Такой вызов, к примеру, можно использовать для вертикального отступа между выводами.
В поток данных записываются все аргументы (объекты), не относящиеся к ключевым словам, преобразованные в строки, разделенные sep и завершаемые end. Аргументы параметров sep и end также имеют строковый тип, они могут не указываться при использовании дефолтных значений.
Параметр sep
Значения всех параметров print описываются в виде аргументов ключевых слов sep, end, file, flush. Если параметр sep не указывается, то применяется его дефолтное значение: sep=’ ‘, и выводимые объекты разделяются пробелами. Пример:
print(1, 2, 3)
1 2 3
В качестве аргумента sep можно указать другое значение, например:
- разделитель отсутствует sep=»;
- вывод с новой строки sep=‘\n’;
- или любую строку:
print(1, 2, 3, sep=’слово-разделитель’)
1слово-разделитель2слово-разделитель3
Параметр end
По умолчанию end=’\n’, и вывод объектов завершается переходом на новую строку. Замена дефолтного значения другим аргументом, например, end=», приведет к изменению формата выводимых данных:
print(‘one_’, end=»)
print(‘two_’, end=»)
print(‘three’)
one_two_three
Параметр file
Функционал print() поддерживает перенаправление вывода с помощью параметра file, который по умолчанию ссылается на sys.stdout – стандартный вывод. Значение может быть изменено на sys.stdin или sys.stderr. Файловый объект stdin применяется для входных данных, а stderr для отправки подсказок интерпретатора и сообщений об ошибках. С помощью параметра file можно задать вывод в файл. Это могут быть файлы формата .csv или .txt. Возможный вариант записи строки в файл:
fileitem = open(‘printfile.txt’,’a’)
def test(objects):
for element in objects:
print(element, file=fileitem)
fileitem.close()
test([10,9,8,7,6,5,4,3,2,1])
На выходе элементы списка будут записаны в printfile.txt по одному в строке.
Параметр flush
Этот параметр имеет отношение к буферизации потока данных и, поскольку он является логическим, может принимать два значения – True и False. По умолчанию параметр отключен: flush=False. Это означает, что сохранение данных из внутреннего буфера в файл будет происходить только после закрытия файла или после непосредственного вызова flush(). Для сохранения после каждого вызова print() параметру требуется присвоить значение True:
file_flush = open(r’file_flush.txt’, ‘a’)
print(«Запись строки в файл«, file=file_flush, flush=True)
print(«Запись второй строки в файл«, file=file_flush, flush=True)
file_flush.close()
Еще один пример использования параметра flush с помощью модуля time:
В этом случае аргумент True параметра flush позволит выводить числа по одному в три секунды, в то время как по умолчанию все числа были бы выведены на экран по истечении 15 секунд. Чтобы наглядно увидеть действие параметра flush, лучше запустить скрипт в консоли. Дело в том, что при использовании некоторых веб-оболочек, в частности, Jupyter Notebook, программа реализуется иначе (без учета параметра flush).
Вывод значений переменных с помощью print()
При выводе строки, содержащей присвоенное переменной значение, достаточно указать через запятую нужный идентификатор (имя переменной). Тип переменной указывать не следует, поскольку print преобразует данные любого типа в строки. Приведем пример:
a = 0
b = ‘Python from scratch’
print(a,’– число, а‘,b,’– строка.’)
0 – число, а Python from scratch – строка.
Еще один инструмент для передачи значений переменных на вывод – метод format. Print при этом выступает в качестве шаблона, в котором вместо имен переменных в фигурных скобках указываются индексы позиционных аргументов:
a = 0
b = ‘Python from scratch’
print(‘{0} является числом, а {1} – строкой.’.format(a,b))
0 является числом, а Python from scratch – строкой.
Вместо format может быть использован символ %, который работает по тому же принципу заполнителей (в предыдущем примере роль заполнителей выполняли фигурные скобки). В этом случае номера индексов заменяются типом данных, получаемым функцией:
- заполнитель %d применяют для числовых данных;
- заполнитель %s – для строк.
a = 0
b = ‘Python from scratch’
print(‘%d является числом, а %s – строкой.’%(a,b))
0 является числом, а Python from scratch – строкой.
Если вместо заполнителя для целых чисел %d указать %s, функция print преобразует число в строку, и код сработает правильно. Но при замене %s на %d будет выведено сообщение об ошибке, поскольку обратная конвертация не осуществляется.
Заключение
С помощью функции print могут быть реализованы различные варианты вывода данных. Помимо описанных в этой статье способов, существуют и другие возможности применения этого инструмента, которые станут доступны по мере углубления в мир программирования Python.