Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 59
Текст из файла (страница 59)
СтрокиТогда каким образом в языке Python производить изменение текстовой информации? Чтобы изменить строку, необходимо создать новую строку с помощьютаких операций, как конкатенация и извлечение подстроки, и затем, если этонеобходимо, присвоить результат первоначальному имени:>>> S = S + ‘SPAM!’ # Чтобы изменить строку, нужно создать новую>>> S‘spamSPAM!’>>> S = S[:4] + ‘Burger’ + S[-1]>>> S‘spamBurger!’Первый пример добавляет подстроку в конец строки S с помощью операцииконкатенации. В действительности здесь создается новая строка, которая затем присваивается имени S, но вы можете представить себе это действие как«изменение» первоначальной строки. Второй пример замещает четыре символа шестью новыми – с помощью операций извлечения подстроки и конкатенации.
Как будет показано далее в этой главе, похожего эффекта можно добитьсяс помощью строкового метода replace. Вот как это выглядит:>>> S = ‘splot’>>> S = S.replace(‘pl’, ‘pamal’)>>> S‘spamalot’Как и всякая операция, создающая новую строку, строковые методы создаютновые строковые объекты.
Если вам необходимо сохранить эти объекты, выможете присвоить их переменной. Создание нового объекта строки для каждого изменения – операция не столь неэффективная, как может показаться, –вспомните, в предыдущей главе говорилось, что интерпретатор автоматическипроизводит сборку мусора (освобождает память, занятую неиспользуемымистроковыми объектами), поэтому новые объекты повторно используют память,ранее занятую прежними значениями.
Интерпретатор ���������������������Python���������������во многих случаях работает гораздо быстрее, чем можно было бы ожидать.Наконец, дополнительно существует возможность сборки текстовых значенийс помощью выражений форматирования строк. Ниже приводятся два примераподстановки значений объектов в строку, при этом происходит преобразование объектов в строки и изменение первоначальной строки в соответствии соспецификаторами формата:>>> ‘That is %d %s bird!’ % (1, ‘dead’)# Выражение форматированияThat is 1 dead bird!>>> ‘That is {0} {1} bird!’.format(1, ‘dead’) # Метод форматирования‘That is 1 dead bird!’# в 2.6 и 3.0Несмотря на впечатление, что происходит замена символов в строке, в действительности в результате форматирования получаются новые строковые объекты, а оригинальные строки не изменяются. Мы будем рассматривать приемыформатирования ниже, в этой же главе, где вы увидите, что операции форматирования могут иметь большую практическую пользу, чем в этом примере.Второй пример представляет строковый метод; и мы в первую очередь познакомимся с методами строк, а потом перейдем к изучению приемов форматирования.Строковые методы227Как будет показано в главе 36, в Python 3.0 и 2.6 появился новыйстроковый тип bytearray, который относится к категории изменяемых, в том смысле, что объекты этого типа могут изменятьсянепосредственно.
В действительности объекты типа bytearray неявляются строками – это последовательности 8-битных целыхчисел. Однако они поддерживают большую часть строковыхопераций и при отображении выводятся как строки символовASCII. Объекты этого типа обеспечивают возможность хранения больших объемов текста, который требуется изменять достаточно часто. В главе 36 мы также увидим, что функции ordи chr способны работать с символами Юникода, которые могутхраниться в нескольких байтах.Строковые методыВ дополнение к операторам выражений строки предоставляют набор методов,реализующих более сложные операции обработки текста.
Методы – это просто функции, которые связаны с определенными объектами. Формально ониявляются атрибутами, присоединенными к объектам, которые ссылаются нафункции. В языке Python выражения и встроенные функции могут работатьс некоторым набором типов, но методы являются специфичными для типовобъектов: строковые методы, например, работают только со строковыми объектами. В ����������������������������������������������������������������Python���������������������������������������������������������� 3.0 некоторые методы могут относиться к разным типам (например, многие типы имеют метод count), но при этом по своей функциональности они в большей степени зависят от типа объекта, чем другие инструменты.Если говорить более точно, функции – это пакеты программного кода, а вызовы методов объединяют в себе выполнение двух операций (извлечение атрибута и вызов функции).Извлечение атрибутаВыражение вида object.attribute означает: «извлечь значение атрибута attribute из объекта object».Вызов функцииВыражение вида function(arguments) означает: «вызвать программный кодфункции function, передав ему ноль или более объектов-аргументов arguments, разделенных запятыми, и вернуть значение функции».Объединение этих двух действий позволяет вызвать метод объекта.
Выражение вызова метода object.method(arguments) вычисляется слева направо, то естьинтерпретатор сначала извлекает метод объекта, а затем вызывает его, передавая ему входные аргументы. Если метод возвращает какой-либо результат, онстановится результатом всего выражения вызова метода.Как будет много раз показано в этой части книги, большинство объектов обладает методами, которые можно вызвать, и все они доступны с использованиемодного и того же синтаксиса вызова метода.
Чтобы вызвать метод объекта, вампотребуется существующий объект. Давайте перейдем к рассмотрению некоторых примеров.228Глава 7. СтрокиВ табл. 7.3 приводятся шаблоны вызова встроенных строковых методов в версии Python 3.0 (более полный и обновленный перечень методов вы найдетев руководстве по стандартной библиотеке языка Python или воспользовавшисьфункцией help в интерактивной оболочке, передав ей любую строку). В ���Python 2.6 набор строковых методов немного отличается – в их число, например,входит метод decode, потому что работа со строками Юникода в этой версии реализована несколько иначе (подробнее об этом рассказывается в главе 36).
В таблице имя S представляет объект строки, а необязательные аргументы заключены в квадратные скобки. Строковые методы, представленные в этой таблице,реализуют высокоуровневые операции, такие как разбиение и слияние, преобразование регистра символов, проверка типа содержимого и поиск подстроки.Таблица 7.3. Строковые методыS.capitalize()S.ljust(width [, fill])S.center(width [, fill]))S.lower()S.count(sub [, start [, end]])S.lstrip([chars])S.encode([encoding [,errors]])S.maketrans(x[, y[, z]])S.endswith(suffix [, start [,end]])S.partition(sep)S.expandtabs([tabsize])S.replace(old, new [, count])S.find(sub [, start [, end]])S.rfind(sub [,start [,end]])S.format(fmtstr, *args, **kwargs) S.rindex(sub [, start [, end]])S.index(sub [, start [, end]])S.rjust(width [, fill])S.isalnum()S.rpartition(sep)S.isalpha()S.rsplit([sep[, maxsplit]])S.isdecimal()S.rstrip([chars])S.isdigit()S.split([sep [,maxsplit]])S.isidentifier()S.splitlines([keepends])S.islower()S.startswith(prefix [, start [, end]])S.isnumeric()S.strip([chars])S.isprintable()S.swapcase()S.isspace()S.title()S.istitle()S.translate(map)S.isupper()S.upper()S.join(iterable)S.zfill(width)Как видите, строковых методов достаточно много, а в книге не так много места,чтобы иметь возможность описать их все, поэтому за подробной информациейобращайтесь���������������������������������������������������������������������������������������������������������������������������к������������������������������������������������������������ �����������������������������������������������������������руководству�����������������������������������������������������������������������������������������������по�����������������������������������������������������������������������������������������стандартной�����������������������������������������������������������������библиотеке����������������������Python или�����������������������������������к��������� ��������справоч-Строковые методы229ным�����������������������������������������������������������������������������������������������������������������������������������������руководствам��������������������������������������������������������.
������������������������������������������������������А теперь давайте поработаем над программным кодом, который демонстрирует некоторые наиболее часто используемые методы в действии и попутно иллюстрирует основные приемы обработки текста, применяемые в языке Python.Примеры использования строковых методов:изменение строкКак уже говорилось ранее, строки являются неизменяемыми объектами,поэтому их невозможно изменить непосредственно. Чтобы из существующейстроки сконструировать новое текстовое значение, необходимо создать новуюстроку с помощью таких операций, как извлечение подстроки и конкатенация.Например, чтобы изменить два символа в середине строки, можно использовать такой способ:>>> S = ‘spammy’>>> S = S[:3] + ‘xx’ + S[5:]>>> S‘spaxxy’При этом, если требуется только заменить подстроку, можно воспользоватьсяметодом replace:>>> S = ‘spammy’>>> S = S.replace(‘mm’, ‘xx’)>>> S‘spaxxy’Метод replace является более универсальным, чем предполагает этот программный код.