Саммерфилд - Программирование на Python 3 (1077331), страница 22
Текст из файла (страница 22)
В том, чтобы добавить в метод зтг. Гсгват() поддержку собственных типов данных, нет ничего сложного, в этом вы сможете убедиться в главе 6. Кроме того, имеется о Функция ечаЦ), стр. 400 104 Глава 2. Типы данных возможность переопределять привычное поведение типов данных и, по желанию, заставлять их возвращать строковую или репрезентативную форму представления. Этого можно добиться путем добавления в поля спецификаторов преобразования. В настоящее время существует три таких спецификатора: з — для принудительного вывода строковой формы, г — для принудительного вывода репрезентативной формы и а — для принудительного вывода репрезентативной формы, но с использованием только символов АЯС11. Ниже приводится пример использования этих спецификаторов: »> "(0) (О.'э) (О!г) (0)а)".Гогза((вес)за1.0есхва1("93.4")) "93.4 93.4 Оесхза1('93.4') Оесхза1('93.4')" В данном случае строковая форма объекта бес(ва1.
Оесгеа1 совпадает со строкой, предоставляемой для метода 31г. Гогваг(), что является вполне обычным делом. Кроме того, в данном конкретном примере нет никакой разницы между репрезентативной формой и репрезентативной формой АЯС11, поскольку в обоих случаях используются только символы АЯС11. Ниже приводится еще один пример, но на сей раз в нем используется строка, содержащая заголовок фильма «й)))з)Х О%4>Х«Ь» и хранящаяся в переменной воч)е. Если вывести строку как "(0) ". Гогза1(зоч(е), она будет выведена без изменений, но если необходимо избежать вывода символов, не входящих в набор АЯС11, можно использовать либо вызов авсг1(зоч1е), либо выводить ее как "(О! а ) ".
Гогваг(воч(е) — в обоих случаях будет получена строка ' хи77(ьхи8аЗЗхс3067Ъ8931хи308(хв308схв308ь'. К настоящему моменту мы знаем, как помещать значения переменных в строку формата и как принудительно выбирать строковую или репрезентативную форму представления. Теперь мы готовы перейти к рассмотрению приемов форматирования самих значений. Спецификаторы формата Форматирование целых чисел, чисел с плавающей точкой и строк часто бывает вполне удовлетворительным. Но если нам требуется более тонкое управление форматированием, мы легко можем реализовать его с помощью спецификаторов формата.
Мы будем отдельно рассматривать форматирование строк, целых чисел и чисел с плавающей точкой, чтобы было легче разобраться в деталях. Общий синтаксис, который в равной мере относится ко всем этим типам данных, показан на рис. 2.6. В случае строк мы можем управлять символом-заполнителем, выравниванием внутри поля, а также минимальной и максимальной шириной поля.
Спецификаторы формата для строк начинаются с символа двоеточия (:), за которым следует пара необязательных символов— символ-заполнитель (который не может быть правой фигурной скобкой )) и символ выравнивания (< — по левому краю, — по центру и >— 105 Строки Ф О ширина заполнитель выравнивание знак .точность тил Мини- мальнзя ширина поля Любой символ, кроме + всегда выводить знак; - знак выводится, только когда необходимо; пробел или знак Рис.
2.6. Спвиифиматор формата в общем виде по правому краю). Далее следует необязательное число, определяющее минимальную ширину поля вывода, и далее, при желании, через точ- ку можно указать максимальную ширину поля вывода. Обратите внимание, что если указан символ-заполнитель, то должно быть указано и направление выравнивания. Мы опустили части спецификатора формата, определяющие знак и тип, потому что на строки они не оказывают никакого влияния. Вполне безопасно (хотя и бессмысленно) использовать одно только двоеточие без указания дополнительных элементов спецификатора. Рассмотрим несколько примеров: »> З = "ТПЕ Змптб ОГ (титл" »> "(0)".(огват(з) с форматирование по умолчанию 'Тпе зшогб от тгытп' »> "(О:25)".гогват(в) в минимальная ширина поля вывода 25 'Тне ашоте от тгытн ' »> "(О;>25)".гогват(в) в выравнивание по правому краю, минимальная ширина 25 тпе зногб ог тгытп' »> "(О: 25)".Тогват(з) з выравнивание по центру, минимальная ширина 25 ' Тпе вшогс от тгытп ' »> "(О:- 25)".тогват(з) з - заполнитель, по центру, минимальная ширина 25 '---Тпе вшого от тгцтн- — -' »> "(О:,<25)".Гогват(з) З .
заполнитель, по левому краю, минимальная ширина 25 'тпе зиого ог тгытп ......' »> "(О:.10)".гогват(в) з максимальная ширина поля вывода 10 'Тое вшогс ' В предпоследнем примере нам пришлось определить выравнивание по левому краю (даже при том, что это — значение по умолчанию). В про- тивном случае спецификатор формата приобрел бы вид:. 25 и просто означал бы максимальную ширину поля вывода 25 символов. < по левому краю; > по правому краю: по центру = заполнять нулями пространство между знаком числа и первой значащей цифрой 3 Я и д д .в д дн в и х д я м с> С7 Ю О а Ю х Максимальная 1пт ширина поля Ь, с, для строк; б, и, количество о, х, знаков после )(; запятой для т1оатз чисел с плаза- в Е ющвй точкой ( 0 6,п,й 106 Глава 2.
Типы данных Как уже отмечалось ранее, внутри спецификатора формата можно использовать замещаемые поля. Это делает возможным динамически определять формат вывода. Ниже приводится пример, демонстрирующий два способа определить максимальную ширину строки с помощью переменной ша хн101п1 »> шахи)отп = 12 »> "(о)".(огшат(з[:шахи>сто)) 'Тое зиог0 от' »> "(О;.(1))".Гогшат(з, шахи)01П) 'Тле зиоге о(' В первом случае используется обычная операция извлечения среза, во втором — вложенное замещаемое поле. Применительно к целым числам спецификаторы формата позволяют управлять символом-заполнителем, выравниванием внутри поля вывода, отображением знака числа, минимальной шириной поля и основанием системы счисления.
Спецификаторы формата для целых чисел начинаются с двоеточия, после которого может следовать пара необязательных символов — символ-заполнитель (который не может быть символом закрывающей фигурной скобки )) и символ выравнивания (< — по левому краю, — по центру, > — по правому краю и = — указывающий на необходимость заполнять пространство между знаком числа и первой значащей цифрой). Далее следует необязательный символ знака числа: «+» — говорит об обязательной необходимости вывода знака числа, «-» — знак выводится только для отрицательных чисел, н пробел говорит о том, что для положительных чисел вместо знака числа должен выводиться пробел, а для отрицательных чисел — знак «-». Далее следует значение минимальной ширины поля, которому может предшествовать символ «8» с обозначением системы счисления (двоичная, восьмеричная или шестнадцатеричная) и символ «О» — в случае необходимости дополнения числа нулями слева.
Если число должно выводиться в системе счисления, отличной от десятичной, необходимо указать символ типа системы счисления: «Ь» — для двоичной, «о» — для восьмеричной, «х»вЂ” для шестнадцатеричной с символами в нижнем регистре и «Х» — для шестнадцатеричной с символами в верхнем регистре.
Для полноты картины следует заметить, что допускается использовать символ «О», обозначающий десятичную систему счисления. Существует еще два символа типа: «с», который означает, что должен выводиться символ Юникода, соответствующий целому числу, и «п» вЂ” когда необходимо обеспечить вывод чисел с учетом региональных настроек. Дополнение нулями слева можно реализовать двумя способами: »> "(О:0=12)7.8огшат(8749203) а 0 - сиивол-заполнитель, минииальная ширина 12 '000008749203' »> "(О:0=12)".(огшат(-8749203)4 0 - символ-заполнитель, минимальная ширина 12 '-00008749203' Строки »> "(О 012)'.(огшат(8749203) в дополнение 0 и минимальная ширина 12 000008749203' »> "(О:012)7.8огшат(-8749203) в дополнение 0 и минимальная ширина 12 '-00008749203' В первых двух примерах 0 определяется как символ-заполнитель, кото- рым заполняется пространство между знаком числа и первой значащей цифрой (=).
Во вторых двух примерах определяется минимальная ши- рина поля 12 символов и признак необходимости дополнения нулями. Ниже приводится несколько примеров управления выравниванием: Ниже приводится несколько примеров управления выводом знака числа: »> "[(О: )] [(1: )]".Гогшат(539802, -539802) '[ 539802] [-539802]' »> "[(0>»)] [(1:«)]".(огшат(539802, -539802) '[»539802] [-539802]' »> "[(О:-)] [(1;-)]7.6огшат(539802, -539802) '[539802] [-539802]' в пробел или знак в знак выводится принудительно в знак "-" выводится только в при необходимости Далее следуют два примера использования символов управления типом: »> "(О;о) (О:о) (О:х) (О:Х)".
(отша((14613198) '110111101111!01011001110 67575316 пегасе ОЕЕАСЕ' »> "(О.во) (О:во) (О:их) (О:вх)".гогшат(14613198) 'ОЫ10111101111101011001110 Оо675?5316 Охг)етасе ОХОЕЕАСЕ' Для целых чисел невозможно определить максимальную ширину по- ля вывода, потому что в противном случае это может повлечь необхо- димость отсечения значащих цифр числа и вывод числа, не имеющего смысла. Последний символ управления форматом вывода целых чисел (доступный также для чисел с плавающей точкой) — это символ «п».