Для чего используется оператор print
Функция Print в Python
Функция print() в языке Питон предназначена для вывода заданных объектов на стандартное устройство вывода — обычно экран, также может отправлять их в файл.
Синтаксис
Рассмотрим синтаксис этой функции. Самый простой пример:
Даже если функция не получает никаких аргументов, все равно необходимо вставлять после названия пустые скобки, что значит для интерпретатора выполнить функцию, а не просто ссылаться на нее.
В результате этого будет выведен неотображаемый символ пустой строки, она появиться на экране, не нужно путать это с пустой строкой, в которой вообще нет никаких символов.
Но чаще всего нужно передать какое-то сообщение пользователю, к примеру:
>>> print(‘Your message here’)
Параметры
Как было сказано, print() можно вызывать без всяких аргументов при необходимости создать пустую строку, или указывать один аргумент для вывода сообщения. Кроме того, функция может принимать любое количество позиционных аргументов, разделяя их запятой, что очень удобно при необходимости объединения нескольких элементов.
Полная версия print выглядит так:
Пример использования функции print
Самый простой пример:
Следующий пример – вывод строкового значения из переменной:
>>> message = ‘Hello world’ >>> print(message)
Выведем разные типы:
>>> print(‘one’, ‘two’, ‘three’) # str one two three >>> print(42) # int 42 >>> print(3.14) # float 3.14 >>> print(True) # bool True >>> print([1, 2, 3]) # list [1, 2, 3] >>> print(<'red', 'green', 'blue'>) # set <'red', 'green', 'blue'>>>> print(<'name': 'Alice', 'age': 42>) # dict <'name': 'Alice', 'age': 42>>>> print((1, 2, 3)) # tuple (1, 2, 3)
Ниже — пример использования параметра sep :
>>> print(‘hello’, ‘world’, sep=None) hello world >>> print(‘hello’, ‘world’, sep=’ ‘) hello world >>> print(‘hello’, ‘world’) hello world
Если функция должна выводить аргументы в виде отдельных строк, можно передать символ экранирования:
>>> print(‘hello’, ‘world’, sep=’\n’) hello world
Более полезный пример — вывод аргументов в виде пути к файлу:
>>> print(‘home’, ‘user’, ‘documents’, sep=’/’) home/user/documents
Второй необязательный параметр — end. Он позволяет предотвратить разрыв строки, когда выведенное сообщение не должно заканчиваться символом новой строки. Для этого передается пустая строка:
print(‘Checking file integrity. ‘, end=») print(‘ok’) Checking file integrity. ok
>>> print(‘The first sentence’, end=’. ‘) >>> print(‘The second sentence’, end=’. ‘) >>> print(‘The last sentence.’) The first sentence. The second sentence. The last sentence.
При необходимости можно указывать одновременно два ключевых аргумента:
print(‘Mercury’, ‘Venus’, ‘Earth’, sep=’, ‘, end=’!’) Mercury, Venus, Earth!
import time source_file = open(‘parse.txt’, ‘w’) for i in range(0, 30): if i % 10 == 0 and i > 0: print(f»iteration #«, file=source_file, flush=True) else: print(f»iteration #«, file=source_file) time.sleep(1) source_file.close()
Кодировка
Функция print() в Python 3 и выше никак не контролирует кодировку символов — это определяется потоком кода. В большинстве случаев нет необходимости менять кодировку, так как по умолчанию используется UTF-8.
В Python 2 кодировка зависит от того, данные какого типа выводятся на экран. При выводе текста кириллицей рекомендуется указывать способ кодировки:
>>> print u’Привет’ >>> print «Привет».decode(‘utf-8’)
Системную кодировку можно узнать через sys.stdout.encoding :
>>> import sys >>> sys.stdout.encoding ‘utf-8’
Буферизация ввода-вывода
Буферизация (от англ. buffer) — способ организации обмена, который подразумевает использование буфера для временного хранения данных.
Блочная буферизация (block-buffered)
Операции ввода и вывода иногда буферизуются с целью повышения производительности. Рассмотрим пример:
import time num_seconds = 1 for countdown in reversed(range(num_seconds + 1)): if countdown > 0: print(countdown, end=». «) time.sleep(1) else: print(‘Go!’)
В качестве конца строки мы используем «. «. В такой реализации функция print() будет накапливать строки в буфер, и выведет сразу весь результат после вызова print(‘Go!’)
Линейная буферизация (line-buffered)
Линейная буферизация потока, перед началом ввода/вывода, ожидает момента, пока в буфере не появиться разрыв строки. Изменив print() в примере выше на следующий:
мы увидим последовательную печать на экран:
Небуферизированный вывод (unbuffered)
Unbuffered поток соответствует своему названию — никакой буферизации не происходит, операция ввода/вывода выполняются без промедления. Для этого достаточно переписать print() из примера выше следующим образом:
print(countdown, end=’. ‘, flush=True)
Тем самым функция print() принудительно очищает поток, не ожидая символа новой строки в буфере.
Стилизированный print
pprint
С помощью модуля pprint, который входит в стандартную библиотеку Python, можно более наглядно отображать некоторые объекты, при этом структура их сохраняется.
Один из примеров использования модуля — словарь со вложенными словарями:
вместо длинной строки будет отображен так:
Есть необязательный параметр depth и indent. Depth указывает — ключи какого уровня вложенности отображать, скрытые уровни будут заменены на троеточие. Indent устанавливает размер отступов:
reprlib
>>> import reprlib >>> reprlib.repr([x**10 for x in range(5)]) ‘[0, 1, 1024, 59049, 1048576]’
json.dumps
Словари часто представляют собой данные JSON, широко используемые во всемирной сети. Для правильной стилизации словаря в строку JSON можно воспользоваться одноименным модулем, который имеет хорошие возможности печати:
Цвет (управляющие коды ANSI)
Для выделения важной информации при выводе текста можно воспользоваться возможностью форматировать текст с помощью ANSI кодов. Это может выглядеть как » \033[31m «, где \033 — указание на то, что дальше описывается управляющий код, [31m – задание красного цвета текста.
def out_red(text): print(«\033[31m <>«.format(text)) def out_yellow(text): print(«\033[33m <>«.format(text)) def out_blue(text): print(«\033[34m <>«.format(text)) out_red(«Вывод красным цветом») out_yellow(«Текст жёлтого цвета») out_blue(«Синий текст»)
Чтобы такой вариант работал не только на Linux, но и на Windows, необходимо активировать поддержку ANSI для stdout в запущенной консоли, делается это так:
import ctypes kernel32 = ctypes.windll.kernel32 kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
Анимация (прелоадеры)
Чтобы сделать интерфейс программы более привлекательным, можно анимировать его. Например, используя preloader, пользователь будет знать, что программа все еще работает.
Вращающееся колесо
Одним из примеров прелоадера является вращающее колесо, что указывает на незавершенную работу, когда точно не известно, сколько времени осталось до завершения запущенной операции. Часто такой прием используется во время загрузки данных с сети, устанавливая простую анимацию движения из последовательности нескольких символов, циклически повторяющихся:
from itertools import cycle from time import sleep for frame in cycle(r’-\|/-\|/’): print(‘\r’, frame, sep=», end=», flush=True) sleep(0.2)
Progress Bar
Если же время до завершения операции известно или же есть возможность определить процент выполнения задачи, можно установить анимированный прелоадер. В таком случае необходимо определить, сколько знаков «#» нужно отобразить и сколько пробелов вставить. После этого текст удаляется и строится сначала:
Best practice
Как убрать пробелы в print() Многие начинающие Python разработчики забывают о том, что разделителем у функции print() по умолчанию является пробел (» «)
Для удаления пробела, используйте параметр sep :
print(«Hello, «, name, ‘!’, sep=») # Hello, Alex!
Python print to file (печать в файл) При необходимости записать какой-то объект в файл можно воспользоваться стандартными возможностями функции print() :
1 открыть нужный файл для записи, вовсе не обязательно создавать его вручную, следующий код сделает это автоматически:
sample = open(‘samplefile.txt’, ‘w’)
2 записать нужное значение в открытый файл:
print(«I’m starting to learn the language Python», file = sample)
3 закрыть файл после окончания операции:
В результате этого будет создан обычный текстовый файл с записанным значением, работать с которым можно будет точно так же, как и с созданным самостоятельно.
Таким образом, несмотря на свою кажущуюся простоту, стандартная функция для вывода print() имеет немало скрытых возможностей, некоторые из которых были рассмотрены.
Функция Print() в Python
На примерах узнайте, какие возможности предлагает функция print в Python.
Это руководство целиком посвящено функции print в Python — из него вы узнаете о том, насколько она недооценена.
Если в Python 2 скобки можно не использовать, то в Python3 они обязательны. Если их не указать, то будет вызвана синтаксическая ошибка.
Из текста выше можно сделать вывод, что в Python 3 print() — это не инструкция, а функция.
Необязательные аргументы:
Вставим список слов в print и разделим их с помощью символа новой строки. Еще раз: по умолчанию разделитель добавляет пробел между каждым словом.
Также можно разделить слова запятыми или добавить два символа новой строки ( \n ), что приведет к появлению пустой строки между каждой строкой с текстом или, например, знак плюс ( + ).
Предположим, есть две строки, а задача состоит в том, чтобы объединить их, оставив пробел. Для этого нужно в первой функции print указать первую строку, str1 и аргумент end с кавычками. В таком случае на экран выведутся две строки с пробелом между ними.
Возьмем другой пример, где есть функция, которая должна выводить значения списка на одной строке. Этого можно добиться с помощью такого значения аргумента end :
Когда исполнение будет завершено, появится файл print.txt в текущей папке.
Как правило, вывод в файл или консоль буферизируется как минимум до тех пор, пока не будет напечатан символ новой строки. Буфер значит, что вывод хранится в определенном регистре до тех пор, пока файл не будет готов к сохранению значения или не окажется закрыт. Задача flush — убедиться в том что, буферизированный вывод благополучно добрался до точки назначения.
Разберем это на примере:
Если поставить одинаковый номер индекса в обоих местах, то при выводе на этих позициях будут одни и те же значения.
Этот способ тоже работает по принципу заполнителей. Но здесь не нужно указывать номера индексов, а только обозначить тип данных, которые получит функция.
Вывод
Это руководство — отличная отправная точка для новичков, желающих добиться высокого уровня мастерства в Python. Поиграйте с функций print еще и разберитесь с другими возможностями, которые не были рассмотрены здесь.
Оператор Print
Записывает отформатированные данные в последовательный файл.
Синтаксис
Print #filenumber, [ outputlist ]
Синтаксис оператора Print # включает следующие части:
Part | Описание |
---|---|
filenumber | Обязательно указывать. Любой допустимый номер файла. |
outputlist | Необязательно указывать. Выражение или список выражений, которые необходимо напечатать. |
Параметры
Setting | Описание |
---|---|
Spc(n) | Используется для вставки пробелов в выходные данные. В этом случае n — количество пробелов, которые необходимо вставить. |
Tab(n) | Используется для добавления точки вставки в столбец с абсолютным номером. В этом случае n — номер столбца. Используйте Tab без аргумента, чтобы добавить точку вставки в начало следующей зоны печати. |
expression | Числовые выражения или строковые выражения, которые необходимо напечатать. |
charpos | Указывает точку вставки следующего символа. Для добавления точки вставки сразу после последнего отображенного символа используйте точку с запятой. Для добавления точки вставки в столбец с абсолютным номером используйте Tab(n). Используйте Tab без аргумента, чтобы добавить точку вставки в начало следующей зоны печати. Если аргумент charpos не указан, следующий символ печатается на следующей строке. |
Примечания
Записанные с помощью оператора Print # данные обычно считываются из файла с помощью оператора Line Input # или Input #.
Если вы опустите аргумент outputlist, а после filenumber добавите только разделитель элементов списка, в файле будет напечатана пустая строка.
Несколько выражений разделяются или пробелом, или точкой с запятой (они в данном случае эквивалентны).
Данные типа Date записываются в файл с помощью стандартного краткого формата даты, распознаваемого системой. Когда компонент даты или времени отсутствует или равен нулю, в файл записывается только предоставленная часть.
В файл ничего не записывается, если для данных outputlist задано значение Empty. Но если для данных outputlist установлено значение Null, в файл записывается Null.
Для данных Error выходные данные отображаются как Error код_ошибки. Ключевое слово Error не переводится независимо от языкового стандарта.
Все данные, записанные в файл с помощью оператора Print #, понятны на международном уровне, то есть эти данные отформатированы надлежащим образом с помощью соответствующего десятичного разделителя.
Так как оператор Print # записывает изображение данных в файл, для правильной печати необходимо разделять данные. Если вы используете Tab без аргументов для перемещения позиции печати в следующую зону печати, оператор Print # также записывает в файл пробелы между полями печати.
Если в будущем вы захотите считать данные из файла с помощью оператора Input #, для записи этих данных в файл используйте оператор Write # вместо Print #. Использование оператора Write # обеспечивает целостность каждого отдельного поля данных благодаря их правильному разделению, что позволяет считывать данные с помощью оператора Input #. Использование Write # также гарантирует правильное считывание данных при любом языковом стандарте.
Пример
В данном примере оператор Print # используется для записи данных в файл.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Для чего используется оператор print
Программы, которые мы рассмотрели в первом уроке, были до-
вольно прямолинейны. Они начинали работу со строки с минималь-
ным номером и шли вперед, исполняя строку за строкой. Компьюте-
ры же очень хорошо использовать не просто для расчетов, а для
часто повторяющихся расчетов. Впе их очень хорошо использовать
для принятия решений. И в том и другом случае необходимо изме-
нение порядка, в котором исполняются строки программы. В этом’
уроке Вы познакомитесь с некоторыми из операторов, позволяющих
это делать. Но сначала рассмотрим несколько шире оператор
print.
20 PRINT «Процент», Р
Вы увидите следующую картину:
Оператор PRINT, использованный нами здесь, имеет следующую
структуру:
Давайте возьмем программу для определения процентов (Про-
грамма 1.2) и попробуем ее доработать с учетом того, что мы
сейчас узнали.
10 REH ««Расчет процента»»
80 STOP
10 REH ««Расчет процента««
15 PRINT «Введите первое число
20 IHPUT f
30 PRINT f
35 PRINT «Введите второе число
40 IHPUT s
50 PRINT s
60 LET p = (s/f >«100
70 PRIHT «Процент», P
80 STOP
Рабочий прогон:
RUN
Введите первое число
80
Введите второе число
37
Вы видите, что программа стала выглядеть гораздо более
дружественной к тому, кто с ней работает.
PRINT «Zone 1». «Zone 2
I ИСК 2. 1 Примем а = 48. b 8, с 6. Что будет получено на
‘ экране после печати следующих строк?
(b) print «Длина»; b. «Ширина»; с
(с) print «Длина», «Ширина
print b. с
Запишите строки PRINT с помошыо которых могут быть получе-
ны следующие результаты:
2. 3 Повтор вычислений с помощью оператора GO ТО.
Введите первое число
80
Введите второе число
42
9 STOP statement, 60:1
Введите первое число
80
Введите второе число
19
9 STOP statement, 60: l
Как видите. Вам приходится раз за разом запускать одну и
ту же программу и вводить в нее данные. Было бы гораздо проше,
если бы компьютер, закончив расчет по одной оценке, сам бы
возвращался назад и запрашивал данные по другой оценке.
Это можно сделать с помощью оператора перехода GO ТО. Он
направит программу к той строке, номер которой указан. Вот так
мы можем переделать нашу прорэмму:
10 REM «« Процент полученных оценок»•
20 PRINT «Введите оошее число оценок»
30 INPUT t
40 PRINT t
50 REM ««Начало ввода««
60 PRINT «введите количество опенок»
90 let P- (m/t) »100
loo priht «процент»,p
110 go to 50
120 stop
П рогон такой программы выглядит так:
RUH
Введите обшее число оценок
во
Введите количество опенок
42
Введите количество оценок
19
Введите количество опенок
16
Так программа и будет продолжать работать и ее надо как-
то остановить, ведь сама она не попадет на строку 120 STOP, раз
строка НО всегда передает рботу в строку 50. Когда в очередной
раз появится запрос ввода числа учеников, получивших какую-то
опенку, вы можете нажать SYHBOL SHIFT и клавишу «А». Программа
остановится с сообщением:
Н STOP in IHPUT, 70:1
ВСК-2. 2 Нижеприведенная программа вычисляет квадраты чисел,
т. е. произведение числа самого на себя. Добавьте в
эту программу оператор GO то так. чтобы можно было использовать
эту программу многократно, вводя все новые и новые числа.
5 REM ««Расчет квадратов»«
10 IHPUT п
20 LET S=n*n
30 PRIHT 3
40 STOP
2. 4 Стиль программирования.
Применение GO то иногда бывает полезным. Тем не менее,
есть все-таки неувязки, например, ненормальное завершение рабо-
ты, когда вместо ок мы имеем дело с курсором «l» на экране.
Программа как бы зациклена между строками 50 и 110 и из этого
круга нет выхода, кроме как прерывать работу внешним вмешатель-
ством.
Ны будем использовать GO ТО экономно и только в тех слу-
чаях. где без него нарушилась бы ясность программы.
И последнее, почти всегда переход GO ТО мы будем делать к
строке с оператором rem. Это позволит здесь же сделать и пояс-
нение, что это за переход и зачем он нужен, в этом есть и еше
один большой смысл. При внесении изменений в программу, когда
меняется содержимое строк и номера строк, переход GO ТО к reh-
строке вешь более безопасная, т. к. меньше шансов, что изменив
что-то Вы нарушите работу GO ТО.
Ны столкнулись с проблемой того, как сообщить компьютеру,
что все оценки учеников на экзамене ны обработали и список
оценок исчерпан.
один из методов состит в тон, чтобы ввести какое-то специ-
альное число, например, 9999. Конечно, маловероятно, что Вам
придется обрабатывать экзаменационные опенки такого количества
учеников, это просто сигнал компьютеру закончить свою работу.
Такое число, используемое для того, чтобы вынудить программу к
каким-то действиям (в нашем случае к прекращению работы) назы-
вают «заглушкой». А сам метод называется методом «заглушки».
Программа будет иметь следующую логическую структуру:
2. Ввод общего количества учеников
3. Ввод количества учеников, получивших некую опенку.
4. Если это число равно 9999. то перейти на пункт 8, иначе
5. Расчет процентов.
6. Печать результата.
Для того, чтобы сделать то. что мы хотим в строке 4. су-
ществует оператор БЕИСИКа:
условие, при исполнении которого программа
‘- перейдет к заданной строке.
это может быть, например, такое условие:
110 IF m=9999 ТНЕН GO ТО 170
и программа примет следующий вид:
го REM ««Всего оценок»«
30 PRINT «Введите общее число оценок»
60 rem ««начало повтора»»
70 PRIHT «Введите количество оценок»
80 IHPUT ш
90 PRIHT m
110 IF rn-9999 THEN GO TO 170
120 reh ««Расчет процента»«
140 PRINT «Процент». P
150 REH ««Возврат для нового ввода»«
Как только Вам захочется прервать работу этой программы.
Вы введете 9999 и она остановится.
ВСК P.. J Мы закончили ВСК-2. 2 с программой:
— —’ 5 rem ««Расчет квадратов»»
10 INPUT п
го LET s=n«n
30 PR I NT S
’10 GO TO 5
Но эта программа сама не остановится никогда. Модифицируй-
те ее так. чтобы она останавливалась при вводе некоторой «за-
глушки»,
Ны использовали Факт равенства п>=9999 для того, чтобы сде-
лать переход, но в «Спектруне» кроме равенства есть и другие
виды соотношений:
= равенство syhbol shift l
> больше, чем syhbol shift т
>- больше или равно symbol shift е
о неравно symbol shift W
БЕЙСИК позволяет вставлять в выражения логические соотно-
шения:
Рассмотрим соотношение л Если л=2, а в=5. то а истина, потону что г то же самое соотношение, когда а=2, а
В-1 является ложным.
При написании программ очень часто оказывается важным
знать, являетеяы ли соотношение «>* или ‘
соотношение Логическое состояние
Проверьте, являются ли нижеследующие соотношения
истинными или ложными при заданных значениях.
Значения Соотношения
Функция print¶
Функция print уже не раз использовалась в книге, но до сих пор не рассматривался ее полный синтаксис:
Функция print выводит все элементы, разделяя их значением sep, и завершает вывод значением end.
Все элементы, которые передаются как аргументы, конвертируются в строки:
Для функций f и range результат равнозначен применению str():
Параметр sep контролирует то, какой разделитель будет использоваться между элементами.
По умолчанию используется пробел:
Можно изменить значение sep на любую другую строку:
Обратите внимание на то, что все аргументы, которые управляют поведением функции print, надо передавать как ключевые, а не позиционные.
В некоторых ситуациях функция print может заменить метод join:
Параметр end контролирует то, какое значение выведется после вывода всех элементов. По умолчанию используется перевод строки:
Можно изменить значение end на любую другую строку:
Python позволяет передавать file как аргумент любой объект с методом write(string). За счет этого с помощью print можно записывать строки в файл:
flush¶
По умолчанию при записи в файл или выводе на стандартный поток вывода вывод буферизируется. Параметр flush позволяет отключать буферизацию.
Пример скрипта, который выводит число от 0 до 10 каждую секунду (файл print_nums.py):
Попробуйте запустить скрипт и убедиться, что числа выводятся раз в секунду.
Теперь, аналогичный скрипт, но числа будут выводиться в одной строке (файл print_nums_oneline.py):
Попробуйте запустить функцию. Числа не выводятся по одному в секунду, а выводятся все через 10 секунд.
Это связано с тем, что при выводе на стандартный поток вывода flush выполняется после перевода строки.