Вывод с помощью print

Мы в основном использовали Python в интерактивном режиме. Это позволяло нам быстро тестировать вводимые данные, но такой подход не очень удобен когда надо сделать программу которая будет запускаться много раз. Мы вводили выражение и тут же получали его значение. Но программы сохраненные в файл не выводят ничего до тех пор пока специально не вызвать команду вывода текста. Или если они содержат ошибку и тогда программа остановится с сообщением об ошибке.

Как же работает вывод в Python? Для этого есть специальная функция print().

Вывод в Python 2

В старых версиях print был оператором и вызов вывода на экран выглядел так print "Hello". Вам точно много раз будет встречаться устаревший код в примерах или в статьях в интернете. Скорее всего такой код без дополнительных модификаций не заработает.

Простейшая программа которая выводит сообщение на экран выглядит так:

1
print("Привет")

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

1
2
hello = "Привет"
print(hello)

Вам теперь должно быть понятнее почему существуют многострочные текстовые переменные. В файле они выглядят более чем уместно:

1
2
3
4
5
6
7
# -*- coding: utf-8 -*-
bits_of_zen = """Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное."""

print(bits_of_zen)

Дзен Питона

Это не случайный текст, а первые строки перевода Дзен Питона взятый с русскоязычной Википедии. Англоязычный Zen of Python доступен в виде пасхального яйца если выполнить import this, можно в интерактивном режиме. Обязательно прочтите этот текст, поскольку именно эта философия сделала Python тем чем он является.

Экранированные символы

Сохраните код в файл под именем bits_of_zen.py и запустите файл в интерактивном режиме:

$ python -i bits_of_zen.py
Красивое лучше, чем уродливое.
Явное лучше, чем неявное.
Простое лучше, чем сложное.
Сложное лучше, чем запутанное.
>>> bits_of_zen
'Красивое лучше, чем уродливое.\nЯвное лучше, чем неявное.\nПростое лучше, чем сложное.\nСложное лучше, чем запутанное.'

Переменная bits_of_zen выглядит не так симпатично как она выводится с помощью print. Везде где строка обрывалась и начиналась сначала появились симоволы \n. Оказывается окончить вывод текста и начать с новой строки имеет специальный символ, который закодирован вот таким образом. Это специальные экранированные символы. Их не так много и для комфортной работы в 99% процентах случаев вы будете работать только несколькими символами:

Последовательность Описание
\n Перевод строки
\' Экранированная одинарная кавычка
\" Экранированная двойная кавычка
\r Возврат каретки
\t Горизонтальная табуляция

Редко используемые

Последовательность Описание
\a Звонок
\b Забой, аналог нажатия кнопки Backspace (Delete на Apple)
\f Перевод страницы
\v Вертикальная табуляция
\N{id} Идентификатор ID базы данных Юникода
\uhhhh 16-битовый символ Юникода в 16-ричном представлении
\Uhhhh… 32-битовый символ Юникода в 32-ричном представлении
\xhh 16-ричное значение символа
\ooo 8-ричное значение символа
\0 Символ Null (не является признаком конца строки)

Исторически ввод символов появился еще до изобретения компьютеров. Все началось с механических пишущих машинок именно на них появились символы пробел, табуляции и вертикальной табуляции. Постепенно наступил этап когда пишущие машинки развились до того что их подключили к компьютеру и получая сигналы они могли автоматически печатать текст. Но все так же передвигая каретку и бросая головку печати на бумагу через красящую ленту. Не удивительно, что в наборе символов сохранилсь команды на возврат на шаг назад (\b, от английского back), это позволяло на уже напечатанный символ напечатать еще один. Перевод строки делал прокрутку листа еще на одну строку ниже (\n, от new line), а потом еще механизм должен был переместить каретку к началу строки (\r, от return). А потом еще эффектно звякнуть звонком (\a, от alert).

Отголоски этого механического прошлого пахнущего свежей краской и смазкой все еще живы в компьютерах и сейчас. В разных операционных системах немного по разному устроен перевод строки. В Windows требовалось следить чтобы перевод строки состоял из последовательности \r\n, тогда как на остальных операционных системах достаточно \n. Начиная с версии Python 3.0 используется универсальные символы перевода строки, достаточно использовать только \n. Но возможно при работе с бинарными данными или старым кодом вы сталкнетесь с этими проблемами.

Экранированные символы можно использовать чтобы добавнить внутри строки кавычку:

>>> print("Кавычка \" в тексте\nНовая строка\n\tСтрока с отступом")
Кавычка " в тексте
Новая строка
        Строка с отступом