Саммерфилд - Программирование на Python 3 (1077331), страница 21
Текст из файла (страница 21)
Сгапе1ате() принимает таблицу преобразований и возвращает копию строки с символами, преобразованными в соответствии с таблицей преобразований. Ниже приводится пример преобразования бенгальских цифр в английские: саые = 7".Маке!гаев("си(ьепда1! о!9!с сего)" "си(ьепда11 ос91с опе)1М(ьепда1! рсдс! сыо)" тИ(репда11 О>9>С Свгее)СИ(Ьепда11 О>9сС Говг)' "1И(Ьепда1! О1дст Гсые)та(Ьепда1! О!911 ых)" "си(ьепда11 осд!с ветер)1М(ьепда11 о19сс е1дпс)" "т,И(Ьепда11 О!9!С пспе)", "0123458789") ргспс("20749".сгапв1асе(саь)е)) В выввдвт: 20749 рг1пс("си(ьепда11 0!911 сыо)071М(ьепда)! о!9!с говг)" "1М(ьепда11 осды оспе)".!гаев!асе(саь)е)) и выведет: 20749 Обратите внимание на то, как в этом примере использовался характерный для РуС)топ прием конкатенации строк в вызове метода ВС г, вадеС- гапв() и во втором вызове функции рг1пс( ), что позволило нам расположить строки в нескольких строках программного кода, не используя экранирование символов перевода строки и явную операцию конкатенации.
Метод асг, еакес гапа() был вызван в контексте пустой строки, потому что совершенно неважно, в контексте какой строки он вызывается— он просто обрабатывает свои аргументы и возвращает таблицу преоб- юо Глава 2. Типы данных разований.' Методы эсг, аакесгапз() и зсг.сгапз181е() могут также использоваться для удаления символов, если в третьем аргументе методу 81г.
аахеСгзпз() передать строку с нежелательными символами. Для более сложных случаев преобразования можно было бы создать отдельные кодеки; за более подробной информацией о кодеках обращайтесь к описанию модуля собес. В языке Рус)соп имеется еще ряд библиотечных модулей, обеспечивающих дополнительные функциональные возможности при работе со строками. Мы уже упоминали модуль оп!собебзсз и в следующем подразделе покажем, как им пользоваться. Из других модулей, на которые следует обратить внимание, можно назвать б!111!Ь, который используется для поиска различий между двумя файлами или строками, класс со.31г!п010 в модуле со, который позволяет обращаться к строкам как к файлам, и модуль сехснгар, который предоставляет средства обертывания и заполнения строк.
Существует также модуль зсг!00, в котором имеется несколько полезных констант, таких как азссс 1е1- Сегэ и азсс1 1оиегсазе. Примеры использования некоторых из этих модулей будут приводиться в главе б. Кроме того, язык РусЬоп обеспечивает превосходную поддержку регулярных выражений с помощью модуля ге — этой теме целиком посвящена глава 12. Форматирование строк с помощью метода бтгЯогта1() Метод зсг. То спаС( ) представляет собой очень мощное и гибкое средство создания строк. Использование метода 81г.
(огзас() в простых случаях не вызывает сложностей, но для более сложного форматирования нам необходимо изучить синтаксис форматирования. Метод зсг.согззс() возвращает новую строку, замещая полл в контекстной строке соответствующими аргументами. Например: »> 'ТПе поче1 '(О) ' таз рчы18Пеб сп [1) Ктогзаг("Наго Т1яеэ", 1854) "ТПе поче1 'Наго Т!зеэ' яаэ риы18Пеб !и 1854" Каждое замещаемое поле идентифицируется именем поля в фигурных скобках. Если в качестве имени поля используется целое число, оно определяет порядковый номер аргумента, переданного методу 81г. (огвзс(). Поэтому в данном случае поле с именем 0 было замещено первым аргументом, а поле с именем 1 — вторым аргументом. Если бы нам потребовалось включить фигурные скобки в строку формата, мы могли бы сделать это, дублируя их, как показано ниже: »> "(((О))) (1);-))".Гогяат("1'я сп Огасеэ", "1'я по1") "(1'з 1п Огасеэ) 1'я пот;-)" Примечание для программистов, использующих объектно-ориентированный стиль: 81 г.
захет гапз() — это метод класса. Строки Если попытаться объединить строку и число, интерпретатор Ру1)топ совершенно справедливо возбудит исключение ТуреЕггог. Но это легко можно сделать с помощью метода в! г. Тогаат(): »> "(0)(!)".Гогаат("ТПа ааоопт Сае 18 $", 200) 'Тве ааочпт Сне 1в $200' С помощью втг, гогаат() мы также легко можем объединять строки (хотя для этой цели лучше подходит метод в!г, )01п()): »> х = "тпгае" »> в ="(О) (!) (2)" »> в = в.тсгаат("Тва". х, Чорв") »> в 'ТПа тагее тора' Здесь мы использовали несколько строковых переменных, тем не менее в большинстве примеров с применением метода в!г.
Тогаат( ) в этом разделе мы будем использовать строковые литералы — исключительно ради удобства; но вы должны помнить, что в любых примерах, где используются строковые литералы, точно также можно было бы использовать и строковые переменные. Замещаемые поля могут определять одним из следующих способов: ((1аЫ паве) (Гте1С паве.'сопчегвтоп) (тта1с папа:гогаат врестгтса!1сп) ((1а1С папа(сопчагв1опгтогаат врас1(!са11оп) Следует заметить, что замещаемые поля могут содержать другие замещаемые поля. Вложенные замещаемые поля не могут иметь какое- либо форматирование — их назначение состоит в том, чтобы позволить динамически определять параметры форматирования.
Примеры использования вложенных полей будут представлены при подробном изучении спецификаторов формата. А теперь приступим к изучению каждой части замещаемого поля, начав с его имени. Имена полей Имя поля может быть либо целым числом, соответствующим одному из аргументов метода втг.
(Огаа!(), либо именем одного из именованных аргументов метода. Именованные аргументы мы будем рассматривать в главе 4, но в них нет ничего сложного, поэтому для полноты картины ниже приводится пара примеров: »> "(ипп) тигпеп (асс) !шв уаагт.тогеат(>гпо="Бпа", асс=88) впе тагпес 88 тшв уааг' »> "тпа (ипо) чав (О) 1авт паек".(огаат(!2, ппое "эсу") Тва Ьоу чав !2 1ав! хаак' Глава 2. Типы данных В первом примере используются два именованных аргумента, иЬс и аде, а во втором — один позиционный аргумент (единственный тип аргументов, который мы использовали до сих пор) и один именованный аргумент.
Обратите внимание, что в списке аргументов именованные аргументы всегда следуют после позиционных, и, конечно же, мы можем использовать в строке формата любые аргументы и в любом порядке. Имена полей могут ссылаться на коллекции, такие как списки. В подобных случаях для идентификации требуемого элемента можно использовать индексы (но не срезы!): »> асоск = ["рарег", "епуа1ораа", "посераеа", "репа", "рарег с1тра"] »> "ие ьауе (О[!)) апс (0[2]) тп всоси".Согвас(атрек) 'иа ьауа епуа1ореа апе по!арапа 1п всоси' Поле с именем 0 ссылается на позиционный аргумент, поэтому полю (О[1] ) соответствует второй элемент в списке а!осК, а полю (0[2] ) — третий элемент в списке а! ос К. о Позднее мы познакомимся со словарями в языке РуС)топ.
Стр тбт ОНИ ХРаНЯт ДаННЫЕ В ВИДЕ ПаР «КЛЮЧ-ЗНаЧЕНИЕ», а ПО- скольку они также могут использоваться в качестве аргументов метода аСг. Тсгват(), приведем короткий пример. Не волнуйтесь, если что-то покажется вам непонятным, — вы все поймете, как только прочтете главу 3. »> С = Е!ст(ап!ва1="е1ерпапт", ие1дж=!2000) »> "тьа (0[аптва1]) иетдьа (0[ие1ды))кд".Согвас(с) 'Тпа а1арЬалт иавдпа 12000хд' При обращении к элементам словаря используется ключ, точно так же как используется целочисленный индекс при обращении к элементам списков и кортежей.
Мы можем также обращаться к атрибутам объектов по их именам. Предположим, что мы импортировали модули ваСЬ и аув, тогда можно будет выполнить такое форматирование: »> "ваСЬ.рт==(0 р!) ауа.вахпп!соса==(т.захир!сове)".Гсгват(ватл, ауа) 'вась.р1==3.141592б5359 ауа.вахпюсоае==55535' Таким образом, синтаксис имен полей позволяет обращаться как к позиционным, так и к именованным аргументам, которые передаются методу асг. Тсгва((). Если в качестве аргументов передаются коллекции, такие как списки или словари, или объекты, имеющие атрибуты, то имеется возможность обращаться к любои части коллекции, используя нотацию [) или ., как это показано на рис.
2.б. Преобразования о Когда мы обсуждали числа типа еества1, Оества1, мы отме- Числа типа Рас!ва1 ЧаЛИ, ЧтО таКИЕ ЧИСЛа МОГУТ ВЫВОДИтЬЕЯ ОДНИМ ИЗ ДВУХ стр. 02 способов, например: Строки Рис. 2.о. Примеры спсцификаторов формата в именах палей с примечаниями »> Оес1аа1.0ес1ааЦ "3.4084 ) Оес1ааЦ '3.4084') »> ргтпт(сес1аа1.0естваЦ "3.4084")) 3.4084 Первый способ отображения значения типа сества1. Оества1 — это репрезентативная форма.
Ее назначение состоит в том, чтобы предоставить строку, которая может быть воспринята интерпретатором РусЬоп для воссоздания объекта, который она представляет. Программы на языке Ру$Ьоп могут прибегать к интерпретации отдельных фрагментов программного кода или целых программ, поэтому в некоторых ситуациях такая возможность может оказаться совсем нелишней. Не все объекты могут быть представлены в форме, позволяющей выполнить их воспроизведение; в таких случаях они предоставляются в виде строки, заключенной в угловые скобки.
Например, репрезентативной формой модуля зуз является строка 3<вс001е 'зуз' (00111-1п)>". Второй способ отображения значения типа сествз1. Оества1 — это строковая форма. Эта форма предназначена для представления человеку, поэтому основное ее назначение состоит в том, чтобы отображать информацию в том виде, в каком она будет иметь определенный смысл для человека. Если тип данных не имеет строковой формы представления, но необходима именно строка, Русйоп будет использовать репрезентативную форму. Встроенные типы данных языка РусЬоп знакомы с методом зтг, тогват() и при передаче их в качестве аргументов этому методу возвращают соответствующую строку для отображения.