Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Особенности форматирования вывода.
До сих пор мы сталкивались с двумя способами вывода значений: операторы выражений и функция print(). (Третий способ - это использование метода write() файловых объектов; на файл стандартного вывода можно ссылаться как на sys.stdout.) Чаще вам захочется больше контроля над форматированием вашего вывода, чем простое печатание разделенных пробелом значений. Есть два способа форматировать ваш вывод; первый способ - чтобы все строки обрабатывали сами себя; используя нарезание строк и операторы конкатенации, вы можете создать любую разметку, какое можете представить. Строковый тип имеет несколько методов, которые выполняют полезные операции для обивки строк данной шириной столбца. Второй способ - использовать formatted string или метод str.format(). Модуль string содержит класс Template, который предлагает еще один способ подстановки значений в строки. Конечно остается один вопрос: как вы конвертируете значения в строки? К счастью Python имеет способы конвертации любого значения в строку: передайте его функции repr() или str(). Функция str() подразумевалась для возврата представлений значений, которые достаточно читабельны, тогда как repr() подразумевалась для генерации представлений, которые могут быть прочитаны интерпретатором (или приведут к SyntaxError, если не окажется эквивалентного синтаксиса). Для объектов, которые не имеют конкретного представления для восприятия человеком, str() вернет то же самое значение, что и repr(). Множество значений, такие как числа или структуры как списки и словари, имеют одинаковое представление, используя любую функцию. Строки, в частности, имеют два отдельных представления. Несколько примеров: >>> s = 'Hello, world.'>>> str(s)'Hello, world.'>>> repr(s)"'Hello, world.'">>> str(1/7)'0.14285714285714285'>>> x = 10 * 3.25>>> y = 200 * 200>>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...'>>> print (s)The value of x is 32.5, and y is 40000...>>> # repr() строки добавляет строковые кавычки и бэкслэши:... hello = 'hello, world \n '>>> hellos = repr(hello)>>> print (hellos)'hello, world \n '>>> # Аргумент для repr() может быть любым объектом Python:... repr((x, y, ('spam', 'eggs')))"(32.5, 40000, ('spam', 'eggs'))"Вот два способа вывести таблицу квадратов и кубов: >>> for x in range(1, 11):... print (repr(x).rjust(2), repr(x*x).rjust(3), end=' ')... # Обратите внимание на использование 'end' в предыдущей строке... print (repr(x*x*x).rjust(4))... 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 72910 100 1000 >>> for x in range(1, 11):... print ('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))... 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 72910 100 1000(Заметьте, что в первом примере один пробел между каждым столбцом был добавлен с помощью print(): он всегда добавляет пробелы между своими аргументами.)
Этот пример демонстрирует метод строковых объектов str.rjust(), который выравнивает строку по правому краю в поле заданной ширины, заполняя ее пробелами слева. Есть схожие методы str.ljust() и str.center(). Они ничего не выводят, а просто возвращают новую строку. Если вводимая строка слишком длинная, они не урезают ее, а возвращают без изменений; это приведет в беспорядок вашу планировку столбцов, но это обычно лучше, чем альтернатива, которая выдала бы ложное значение. (Если вы действительно хотите усечь, вы всегда можете добавить оператор среза, как в x.ljust(n)[:n].) Существует другой метод, str.zfill(), который заполняет нулями слева числовую строку. Он понимает знаки плюс и минус: >>> '12'. zfill(5) '00012' >>> '-3.14'. zfill(7) '-003.14' >>> '3.14159265359'. zfill(5) '3.14159265359'Основное использование метода str.format() выглядит вот так: >>> print('We are the {} who say "{}!"'. format('knights', 'Ni'))We are the knights who say "Ni!Скобки и символы внутри них (называемые полями форматирования) заменяются объектами, переданными методу str.format(). Число в скобках может быть использовано как ссылка на позицию объекта, переданного методу str.format(). >>> print('{0} and {1}'. format('spam', 'eggs'))spam and eggs>>> print('{1} and {0}'. format('spam', 'eggs'))eggs and spamЕсли в методе используются аргументы-ключевые слова, их значения определяются путем использования имени аргумента. >>> print('This {food} is {adjective}.'. format(... food= 'spam', adjective= 'absolutely horrible'))This spam is absolutely horrible.Позиционные и keyword (ключевые слова - прим. пер.) аргументы могут быть произвольно скомбинированы: >>> print('The story of {0}, {1}, and {other}.'. format('Bill', 'Manfred', other= 'Georg'))The story of Bill, Manfred, and Georg.'!a' (применяет ascii()), '!s' (применяет str()) и '!r' (применяет repr()) могут быть использованы для конвертирования значение перед тем, как оно будет отформатировано: >>> contents = 'eels' >>> print('My hovercraft is full of {}.'. format(contents))My hovercraft is full of eels.>>> print('My hovercraft is full of {!r}.'. format(contents))My hovercraft is full of 'eels'.Необязательное ':' и спецификатор формата могут следовать за именем поля. Это позволяет получить больший контроль над форматированием значения. Следующий пример округляет Pi до трех знаков после точки.
Передача целого числа после ':' создаст поле, минимальная ширина которого будет соответствовать этому числу. Это полезно для создания таблицы. >>> table = { 'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}>>> for name, phone in table.items():... print('{0:10} ==> {1:10d}'. format(name, phone))...Jack ==> 4098Dcab ==> 7678Sjoerd ==> 4127Если у вас действительно длинная строка, которую вы не хотите разделять, будет замечательно, если вы упомяните переменные, которые форматируются по имени, вместо позиций. Это может быть сделано простой передачей словаря и использованием квадратных скобок '[]' для доступа к ключам >>> table = { 'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}>>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '... 'Dcab: {0[Dcab]:d}'. format(table))Jack: 4098; Sjoerd: 4127; Dcab: 8637678Это может быть также сделано передачей таблицы в качестве аргумента-ключевого слова с использованием нотации '**'. >>> table = { 'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}>>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'. format(**table))Jack: 4098; Sjoerd: 4127; Dcab: 8637678Это особенно полезно в сочетании с функцией vars(), которая возвращает словарь, включающий все локальные переменные.
|
||||||
Последнее изменение этой страницы: 2021-07-18; просмотров: 42; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.128.170.27 (0.006 с.) |