Как сделать форматный вывод в питоне
Операции форматирования строк позволяют выполнять подстановку в строки значений различных типов за одно действие в нужном (форматированном виде). Таким образом, строка получает удобное представление.
Например, одним из полезных применений операций форматирования строк является вывод значений чисел с плавающей запятой с указанием фиксированной точности (заданного количества знаков после запятой).
Операции форматирования строк могут выполняться одним из двух способов:
- с помощью выражений форматирования строк. Эти выражения базируются на модели функции printf() языка C;
- с помощью метода format() .
2. Выражения форматирования строк. Правила создания. Бинарный оператор %
Выражения форматирования строк используют модель функции printf() языка C. Чтобы создать выражение форматирования строки используется бинарный оператор % .
В наиболее общем случае выражение форматирования строки имеет вид:
- format_string – строка форматирования;
- list_of_objects – список объектов.
Строка форматирования format_string может содержать:
Синтаксис использования спецификатора формата выглядит следующим образом:
- name — ключ в словаре. Это случай, когда происходит форматирование строк из словаря;
- flags — перечень флажков. С помощью флажков можно задавать, например, выравнивание, наличие начальных нулей (0) и тому подобное;
- width — общая ширина поля для представления строки;
- .precision — количество знаков после десятичной запятой;
- code — символ спецификатора формата (смотрите таблицу ниже). Он определяет каким образом представлять данные из перечня list_of_objects .
Символ спецификатора формата может получать следующие значения:
- s — вывод строки. Здесь используется функция str(x) , где x — объект из списка list_of_objects . Более подробно о работе функции str() можно прочитать здесь;
- r — так же как s , но используется функция repr(x) . Работа функции repr() подробно описывается здесь;
- c — одиночный символ;
- d — десятичное целое число;
- i — целое число;
- u — то же, что и d ;
- o — восьмеричное целое число;
- x — шестнадцатеричное целое число;
- X — то же, что и x , но шестнадцатеричные цифры возвращаются в верхнем регистре;
- e — вещественное число в экспоненциальной форме;
- E — то же, что и e . В этом случае алфавитные символы возвращаются в верхнем регистре;
- f , F — вещественное число в десятичном представлении;
- g , G — вещественное число e , E или f ;
- % — символ % .
Например, чтобы вывести вещественное число с точностью 3 знака после запятой нужно указать следующий спецификатор формата
- .3 – указание того, что выводится 3 знака после запятой;
- f – указание того, что выводится вещественное число в десятичном представлении.
3. Примеры форматирования целочисленных значений
Ниже приведен пример, демонстрирующий использование выражений форматирования строк, отображающих целые числа.
Результат выполнения программы
4. Пример, демонстрирующий форматирование чисел с плавающей запятой
Результат выполнения программы
5. Пример, демонстрирующий форматирование строк и одиночных символов
В примере демонстрируется использование спецификаторов формата r , s , c при образовании выражений форматирования строк.
Вы можете использовать str.format для форматирования вывода. Пары в скобках заменяются аргументами в порядке их передачи:
Индексы также могут быть указаны в скобках. Номера соответствуют индексам аргументов , переданных str.format функции ( от 0).
Именованные аргументы также могут быть использованы:
Атрибуты объектов можно ссылаться при передаче в str.format :
Также могут быть использованы словарные ключи:
То же относится и к индексам списков и кортежей:
В дополнение к индексам аргументов, вы можете также включать в спецификацию формата внутри фигурных скобок. Это выражение , которое следует , и особые правила должны предшествовать двоеточие ( : ). Смотрите документацию для полного описания спецификации формата. Пример спецификации формата является директива выравнивания :~^20 ( ^ означает выравнивание по центру, общая ширина 20, залить ~ характер):
format позволяет поведение не представляется возможным с % , например , повторение аргументов:
Как format является функцией, она может быть использована в качестве аргумента в других функциях:
Выравнивание и заполнение
Примечание: вы можете достичь тех же результатов , используя строковые функции ljust() , rjust() , center() , zfill() , однако эти функции являются устаревшими , начиная с версии 2.5.
Форматные литералы (f-строка)
Строки литералов формата были введены в PEP 498 (Python3.6 и вверх), что позволяет предварять f в начало строки буквальной эффективно применять .format к нему со всеми переменными в текущей области.
Это работает и с более сложными форматными строками, включая выравнивание и точечные обозначения.
Примечание: f'' не означает конкретный тип , как b'' для bytes или u'' для unicode в python2. Формирование немедленно применяется, что приводит к нормальному перемешиванию.
Строки формата также могут быть вложенными:
Выражения в f-строке оцениваются в порядке слева направо. Это можно обнаружить, только если выражения имеют побочные эффекты:
Форматирование строки с указанием даты и времени
Любой класс может настроить свой собственный синтаксис строки форматирования через __format__ метод. Тип в стандартной библиотеке Python , что делает удобной использовать это datetime типа, где можно использовать strftime -как форматирования кода непосредственно в str.format :
Полный список список даты и времени форматирования можно найти в официальном documenttion .
Форматирование с использованием Getitem и Getattr
Любая структура данных , которая поддерживает __getitem__ может иметь их вложенную структуру отформатирован:
Атрибуты объектов могут быть доступны с помощью getattr() :
Форматирование с плавающей точкой
То же самое относится и к другому способу ссылки:
Числа с плавающей точкой также могут быть отформатированы в научной нотации или в процентах:
Вы также можете комбинировать и нотации. Это особенно полезно , когда вы хотите , чтобы закруглить все переменные заранее определенное количество знаков после запятой с 1 декларацией:
Форматирование числовых значений
.format() метод может интерпретировать ряд в различных форматах, таких как:
Форматирование целых чисел в различные основания (шестнадцатеричное, октавное, двоичное)
Используйте форматирование для преобразования кортежа RGB в цветную шестнадцатеричную строку:
Только целые числа могут быть преобразованы:
Пользовательское форматирование для класса
Все , что ниже , относится к str.format метода, а также format функции. В тексте ниже, эти два являются взаимозаменяемыми.
Для каждого значения , которое передается в format функцию, Python ищет __format__ метод для этого аргумента. Поэтому Ваш собственный пользовательский класс может иметь свой собственный __format__ метод определения , как format функция будет отображать и форматировать свой класс , и это атрибуты.
Это отличается от __str__ метода, как и в __format__ методе вы можете принять во внимание язык форматирования, включая выравнивание, ширину поля и т.д., и даже (если вы хотите) реализовать свои собственные спецификаторы формата, и ваши собственные расширения языка форматирования. 1
Если ваш пользовательский класс не имеет пользовательский __format__ метод и экземпляр класса передается в format функции, python2 всегда будет использовать возвращаемое значение __str__ метода или __repr__ метод , чтобы определить , что печатать (и если ни один не существует , то по умолчанию repr будет использоваться), и вам нужно будет использовать s спецификатор формата в формат этого. С Python3, чтобы передать свой собственный класс в format функции, вам нужно будет определить __format__ метод вашего пользовательского класса.
Вложенное форматирование
Некоторые форматы могут принимать дополнительные параметры, такие как ширина форматированной строки или выравнивание:
Те могут быть также предусмотрены в качестве параметров format путем вложения более <> внутри <> :
Это может быть полезно в тех случаях, когда параметры заранее неизвестны, например, при выравнивании табличных данных:
Обивка и усечение строк, комбинированные
Допустим, вы хотите напечатать переменные в столбце из 3 символов.
Примечание: удвоение < и >избегает их.
Именованные заполнители
Формат строка может содержать именованные заполнители, интерполированные с использованием именованных аргументов в format . Использование словаря (Python 2.x)
Использование словаря (Python 3.2+)
str.format_map позволяет использовать словари без необходимости распаковывать их первыми. Кроме того , класс data (который может быть пользовательский тип) используется вместо свежезаполненной dict .
Без словаря:
Синтаксис
Параметры
Примечания
Научим основам Python и Data Science на практике
Это не обычный теоритический курс, а онлайн-тренажер, с практикой на примерах рабочих задач, в котором вы можете учиться в любое удобное время 24/7. Вы получите реальный опыт, разрабатывая качественный код и анализируя реальные данные.
Условия (ветвления if-elif-else) и тернарные операторы
Введение Примеры If, Elif, и Else В Python можно определить ряд условных , используя , if для первого, elif для отдыха, вплоть до окончательного (опционально) else для чего - нибудь не пойманного других условных. number
Enum в Python
Введение Примеры Создание перечисления (Python 2.4 до 3.3) Перечисления были перенесены с Python 3.4 на Python 2.4 через Python 3.3. Вы можете получить этот enum34 Backport от PyPI. pip install enum34 Создание перечисления идентично
Мы уже встречались с функцией print() . Она отвечает за вывод данных, по-умолчанию на экран. Если код содержится в файле, то без нее не обойтись. В интерактивном режиме в ряде случаев можно обойтись без нее.
Ввод данных в программу и их вывод важны в программировании. Без ввода программы делали бы одно и то же, исключая случаи, когда в них самих генерируются случайные значения. Вывод позволяет увидеть, использовать, передать дальше результат работы программы.
Обычно требуется, чтобы программа обрабатывала какой-то диапазон различных входных данных, которые поступают в нее из внешних источников. В качестве последних могут выступать файлы, клавиатура, сеть, выходные данные из другой программы. В свою очередь вывод данных, например, возможен в файл, по сети, в базу данных, на принтер. Однако нередко информацию просто выводят на экран монитора.
Можно сказать, что программа – это открытая система, которая обменивается чем-либо с внешней для нее средой. Если живой организм в основном обменивается веществом и энергией, то программа – данными, информацией.
Вывод данных. Функция print()
Что такое функция в программировании, узнаем позже. Пока будем считать, что print() – это такая команда языка Python, которая выводит то, что в ее скобках на экран.
В скобках могут быть любые типы данных. Кроме того, количество данных может быть различным:
Можно передавать в функцию print() как непосредственно литералы (в данном случае "a:" и 1), так и переменные, вместо которых будут выведены их значения. Аргументы функции (то, что в скобках), разделяются между собой запятыми. В выводе вместо запятых значения разделены пробелом.
Если в скобках стоит выражение, то сначала оно выполняется, после чего print() уже выводит результат данного выражения:
В print() предусмотрены дополнительные параметры. Например, через параметр sep можно указать отличный от пробела разделитель строк:
Параметр end позволяет указывать, что делать, после вывода строки. По-умолчанию происходит переход на новую строку. Однако это действие можно отменить, указав любой другой символ или строку:
Обычно end используется не в интерактивном режиме, а в скриптах, когда несколько выводов подряд надо разделить не переходом на новую строку, а, скажем, запятыми. Сам переход на новую строку обозначается символом '\n'. Если присвоить это значение параметру end , то никаких изменений в работе функции print вы не увидите, так как это значение и так присвоено по-умолчанию:
Однако, если надо отступить на одну дополнительную строку после вывода, то можно сделать так:
В функцию print нередко передаются так называемые форматированные строки, хотя по смыслу их правильнее называть строки-шаблоны. Никакого отношения к самому print они не имеют. Когда такая строка находится в скобках print() , интерпретатор сначала согласно заданному в ней формату преобразует ее к обычной строке, после чего передает результат в print() .
Форматирование может выполняться в так называемом старом стиле или с помощью строкового метода format . Старый стиль также называют Си-стилем, так как он схож с тем, как происходит вывод на экран в языке C. Рассмотрим пример:
Здесь вместо трех комбинаций символов %s , %d , %f подставляются значения переменных pupil , old , grade . Буквы s , d , f обозначают типы данных – строку, целое число, вещественное число. Если бы требовалось подставить три строки, то во всех случаях использовалось бы сочетание %s .
Хотя в качестве значения переменной grade было указано число 9.2, на экран оно вывелось с дополнительными нулями. Чтобы указать, сколько требуется знаков после запятой, надо перед f поставить точку, после нее указать желаемое количество знаков в дробной части:
Теперь посмотрим на метод format() :
В строке в фигурных скобках указаны номера данных, которые будут сюда подставлены. Далее к строке применяется метод format() . В его скобках указываются сами данные (можно использовать переменные). На нулевое место подставится первый аргумент метода format() , на место с номером 1 – второй и т. д.
На самом деле возможности метода format() существенно шире, и для их изучения понадобился бы отдельный урок. Нам пока будет достаточно этого.
В новых релизах Питона появился третий способ создания форматированных строк – f-строки. Перед их открывающей кавычкой прописывается буква f. В самой строке внутри фигурных скобок записываются выражения на Python, которые исполняются, когда интерпретатор преобразует строку-шаблон в обычную.
В примере число 5 после переменной a обозначает количество знакомест, отводимых под вывод значения переменной. В выражении b + 0.2:.1f сначала выполняется сложение, после этого значение округляется до одного знака после запятой.
Ввод данных. Функция input()
За ввод в программу данных с клавиатуры в Python отвечает функция input . Когда вызывается эта функция, программа останавливает свое выполнение и ждет, когда пользователь введет текст. После этого, когда он нажмет Enter, функция input() заберет введенный текст и передаст его программе, которая уже будет обрабатывать его согласно своим алгоритмам.
Если в интерактивном режиме ввести команду input() , то ничего интересного вы не увидите. Компьютер будет ждать, когда вы что-нибудь введете и нажмете Enter или просто нажмете Enter. Если вы что-то ввели, это сразу же отобразиться на экране:
Функция input() передает введенные данные в программу. Их можно присвоить переменной. В этом случае интерпретатор не выводит строку сразу же:
В данном случае строка сохраняется в переменной answer , и при желании мы можем вывести ее значение на экран:
При использовании функции print() кавычки в выводе опускаются:
Куда интересней использовать функцию input() в скриптах – файлах с кодом. Рассмотрим такую программу:
При запуске программы, компьютер ждет, когда будет введена сначала одна строка, потом вторая. Они будут присвоены переменным name_user и city_user . После этого значения этих переменных выводятся на экран с помощью форматированного вывода.
Вышеприведенный скрипт далек от совершенства. Откуда пользователю знать, что хочет от него программа? Чтобы не вводить человека в замешательство, для функции input предусмотрен специальный параметр-приглашение. Это приглашение выводится на экран при вызове input() . Усовершенствованная программа может выглядеть так:
Обратите внимание, что в программу поступает строка. Даже если ввести число, функция input() все равно вернет его строковое представление. Но что делать, если надо получить число? Ответ: использовать функции преобразования типов.
В данном случае с помощью функций int() и float() строковые значения переменных qty и price преобразуются соответственно в целое число и вещественное число. После этого новые численные значения присваиваются тем же переменным.
Программный код можно сократить, если преобразование типов выполнить в тех же строках кода, где вызывается функция input() :
Сначала выполняется функция input() . Она возвращает строку, которую функция int() или float() сразу преобразует в число. Только после этого происходит присваивание переменной, то есть она сразу получает численное значение.
Практическая работа
Напишите программу (файл user.py ), которая запрашивала бы у пользователя:
- его имя (например, "What is your name?")
- возраст ("How old are you?")
- место жительства ("Where are you live?")
После этого выводила бы три строки:
"This is имя "
"It is возраст "
"(S)he live in место_жительства "
Вместо имя , возраст , место_жительства должны быть данные, введенные пользователем. Примечание: можно писать фразы на русском языке, но если вы планируете стать профессиональным программистом, привыкайте к английскому.
Напишите программу (файл arithmetic.py ), которая предлагала бы пользователю решить пример 4 * 100 - 54. Потом выводила бы на экран правильный ответ и ответ пользователя. Подумайте, нужно ли здесь преобразовывать строку в число.
Запросите у пользователя четыре числа. Отдельно сложите первые два и отдельно вторые два. Разделите первую сумму на вторую. Выведите результат на экран так, чтобы ответ содержал две цифры после запятой.
Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса
Что такое форматирование строк в Python с помощью %?
Раньше форматирование строк происходило при помощи оператора % .
Вот основной синтаксис данного оператора:
Вы можете создать строку и использовать %s внутри нее. %s здесь играет роль плейсхолдера. Дальше вы можете написать значок % , а затем – фактическое строковое значение, которое хотите использовать. Это значение в результате вставится на место плейсхолдера.
Вот базовый пример использования форматирования строки с помощью % .
Этот метод часто называют старым, потому что Python 3 представил метод str.format() , а также f-строки.
Что такое метод str.format() в Python?
Вот основной синтаксис данного метода:
Внутри строки мы можем использовать фигурные скобки <> . Они играют роль плейсхолдеров для аргументов. Аргументы – это значения, которые будут подставлены в строку.
В этом примере мы хотим напечатать "Hello, my name is Jessica. I am a musician turned programmer."
В строке у нас будет всего три пары фигурных скобок. Они выступят в роли плейсхолдеров для значений Jessica , musician и programmer .
Внутри скобок для str.format() мы будем использовать значения Jessica , musician и programmer следующим образом:
Таким образом, целиком наш код будет выглядеть так:
Лаборатория Django-разработки
За 3 месяца отработай навыки Django-разработки до профессионального уровня на серьезном проекте под руководством наставника.
Позиционные аргументы
Также можно получить доступ к значению аргументов, используя в фигурных скобках индексы.
В этом примере метод .format() имеет два аргумента: "trumpet" и "drums" .
Мы можем получить доступ к этим значениям внутри строки, обратившись к ним по индексам. относится к первому аргументу ( "trumpet" ), а — ко второму ( "drums" ).
Вот наш полный код и предложение, которое будет выведено на экран:
Мы можем изменить этот пример и поменять местами номера индексов в строке. Вы заметите, что предложение изменилось, так как расположение аргументов поменялось.
Именованные аргументы
В следующем примере у нас есть два ключа: organization и adjective . Мы пропишем их внутри строки:
Метод .format() в качестве аргументов получает пары ключ-значение:
Целиком наш код будет выглядеть следующим образом:
Как смешивать именованные и позиционные аргументы
В str.format() вы можете использовать и именованные, и позиционные аргументы одновременно.
В этом примере мы собираемся написать небольшой рассказ о поездке в Диснейленд.
Сначала мы создадим несколько переменных для имени, числа, прилагательного и аттракциона Диснейленда.
Затем мы создадим нашу строку, используя различные аргументы. Также добавим \n , чтобы компьютер создавал новую строку после каждого предложения.
Внутри скобок в методе str.format() мы присвоим ключам name , adjective , hours и disney_ride в качестве значений наши переменные.
будет иметь значение Disneyland .
Полностью наш код выглядит так:
Запустив его, мы получим следующий результат:
Что такое f-строки?
Форматированные строковые литералы (или f-строки) позволяют включать выражения прямо внутри ваших строк. Непосредственно перед строкой вы помещаете f или F . Это сообщает компьютеру, что вы хотите использовать f-строку.
Вот так выглядит основной синтаксис:
Вот простой пример, который поможет нам вывести на экран предложение Maria and Jessica have been friends since grade school .
Если мы вместо строчной f напишем заглавную, то всё будет работать точно так же.
Результаты последних двух примеров абсолютно идентичны:
Вы также можете использовать f-строку для форматирования данных из словаря.
Давайте рассмотрим следующий пример. У нас есть словарь. В нем представлены лучшие позиции мужских баскетбольных команд колледжей и количество выигранных ими игр из возможных 32.
Внутри цикла for мы можем использовать f-строку для форматирования выводимых результатов.
Использование двоеточия в и указывает компьютеру создать поле шириной 10 символов. Так мы получим ровные столбцы для наших данных.
Соберем наш код и получим следующую программу:
Теперь давайте запустим её. Вот, что у нас получится:
Вот основной синтаксис такой строки:
Давайте рассмотрим пример, чтобы лучше понять, как это работает.
В этом примере мы хотим напечатать I love to learn with Pythonist! , используя шаблонные строки.
Чтобы их использовать, сначала нужно импортировать класс Template из стандартной библиотеки string .
Затем мы можем использовать класс Template и указать строку внутри скобок. Мы поставим знак доллара $ перед именем. Позже $name заменится реальным значением.
Затем мы добавляем .substitute() к шаблону и присваиваем name значение Pythonist .
Таким образом, мы получили следующий код:
Заключение
Форматирование строк в Python можно осуществлять по-разному.
Более старый способ форматирования заключался в использовании оператора % .
%s действует как плейсхолдер для реального значения. Вы помещаете реальное значение после оператора % .
Этот метод часто называют старым, потому что Python 3 представил метод str.format() и f-строки.
В методе str.format() вы используете фигурные скобки для плейсхолдеров и круглые — для реальных значений. Этот метод может принимать именованные и позиционные аргументы.
"template string <>".format(arguments)
F-строки позволяют включать выражения в ваши строки. Непосредственно перед строкой вы помещаете f или F , которые сообщают компьютеру, что вы хотите использовать f-строку.
Вы также можете использовать шаблонные строки, импортировав класс Template из стандартной библиотеки. Шаблонные строки – это строки Python, которые используют плейсхолдеры для реальных значений.
Мы надеемся, что эта статья оказалась для вас полезной, и желаем удачи в вашем путешествии в мире Python!
Лаборатория Django-разработки
За 3 месяца отработай навыки Django-разработки до профессионального уровня на серьезном проекте под руководством наставника.
Функция print() в языке Питон предназначена для вывода заданных объектов на стандартное устройство вывода — обычно экран, также может отправлять их в файл.
Синтаксис
Рассмотрим синтаксис этой функции. Самый простой пример:
Даже если функция не получает никаких аргументов, все равно необходимо вставлять после названия пустые скобки, что значит для интерпретатора выполнить функцию, а не просто ссылаться на нее.
В результате этого будет выведен неотображаемый символ пустой строки, она появиться на экране, не нужно путать это с пустой строкой, в которой вообще нет никаких символов.
>>> print('Your message here')
Параметры
Полная версия print выглядит так:
- *objects — объект/объекты которые необходимо вывести;
- sep — разделитель между объектами. В качестве своего значения можно передавать строку или None (по умолчанию пробел " ");
- end — символ в конце строки (по умолчанию перенос строки \n);
- file — file-like объект [поток] (по умолчанию sys.stdout);
- flush — принудительный сброс потока [работает с версии Python 3.3] (по умолчанию False).
Пример использования функции print
Самый простой пример:
Следующий пример – вывод строкового значения из переменной:
>>> message = 'Hello world' >>> print(message)
Выведем разные типы:
Ниже — пример использования параметра 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
print('Checking file integrity. ', end='') print('ok') Checking file integrity. ok
Как и в случае с sep , end можно использовать для объединения отдельных фрагментов в один большой. При этом вместо объединения аргументов текст из каждого вызова функции будет располагаться в одной строке:
>>> 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!
Еще одни параметры print() — file и flush . В примере ниже реализована запись логов в файл порциями. С помощью параметра file данные выводятся не на экран, а в файл. Flush незамедлительно сбрасывает накопленный буфер в файл каждые 10 итераций.
Кодировка
Функция 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
Модуль reprlib позволяет использовать функцию repr() , благодаря которой сокращается отображение глубоко вложенных или больших контейнеров, а также множества рекурсивных вызовов:
>>> 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 :
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() имеет немало скрытых возможностей, некоторые из которых были рассмотрены.
Читайте также: