Лутц М. - Изучаем Python (1077325), страница 40
Текст из файла (страница 40)
Кроме того, в отличие от таких языков, как С, в языке РуСЬоп отсутствует специальный тип для представления единственного символа (как тип сваг в языке С), поэтому в случае необходимости используются односимвольные строки. Строго говоря, строки в языке Ру(поп относятся к категории неизменяемых последовательностей, в том смысле, что символы, которые они содержат, имеют определенный порядок следования слева направо и что сами строки невозможно изменить.
Фактически, строки — это первый представитель большого класса объектов, называемых последовательностями, которые мы будем здесь изучать. Обратите особое внимание на операции над последовательностями, представленные в етой главе, так как они похожим образом работают и с другими типами Глава 7.
Строки последовательностей, такими как списки и кортежи, которые мы будем рассматривать позже. В табл. 7.1 приводятся наиболее типичные литералы строк и операций, которые обсуждаются в этой главе. Пустые строки записываются как пара кавычек (или апострофов), между которыми ничего нет; и существуют различные способы записи строк в программном коде.
Для работы со строками поддерживаются операции выражений, такие как конкатенация (объединение строк), выделение подстроки, выборка символов по индексам (по смещению от начала строки) и т. д. Помимо выражений язык Ру()соп предоставляет ряд строковых методов, которые реализуют обычные задачи работы со строками, а также модули для решения более сложных задач обработки текста, таких как поиск по шаблону. Все эти инструменты будут рассматриваться далее в этой же главе. Таблица 7.1.
Иаиболее типичные литералы строк и операции Интерпретация Операция Пустая строка Строка в кавычках Блоки в тройных кавычках Неформатированные строки Строки с символами Юяякода Конкатенация, повторение 5) 52 = 5рвз в С)оск = 53 = г'х,Сверх,враз' 54 = и'врва' 51 к 52 52 * 3 Обращение к символу по индексу, извлечение под- строки (среза), длина 52[1] 52[с:) ] 1вп[52) Форматирование строки "в %5 раггос" % суре Методы строк: поиск, удаление пробелов, поиск с заменой, разбиение на подстроки по символу-раз- делителю, проверка содержимого, преобразование регистра символов и т.
д. 52. 11по['рв') 52.гэтг1р[) 52.гор!все['ра', 'хх') 51.5р!сс[, ) въ свосрсс[) вс. 1оиег[) Обход в цикле, проверка на вхождение Гог х сп 52 'врва' 1п 52 Помимо базового набора инструментов для работы со строками, РуСЬоп также поддерживает более сложные приемы обработки строк, основанные на применении шаблонов, с помощью библиотечного модуля ге (геяп[аг ехргеввюп — регулярные выражения), о котором говорилось в главе 4.
Данная глава начинается с краткого обзора форм строковых литералов и базовых строковых выражений, затем мы перейдем к более сложным инструментам, таким как методы строк и форматирование. 1в1 Литералы строк Литералы строк Вообще говоря, работать со строками в языке РуЬ)топ достаточно удобно. Самое сложное, пожалуй, — это наличие множества способов записи строк в программном коде: ° Строки в апострофах: 'вра" в' ° Строки в кавычках: "вра'в" ° Строки в тройных кавычках: ' ' '...
враз... ' ', """... враз ° Экранированные последовательности; "в\трт,пат,Ое" ° Неформатированные строки: г" С: т,пеи'ттевт, врв" ° Строки символов Юникода: и 'ед0в'то0020врае' Варианты представления строк в апострофах и кавычках являются наиболее типичными, остальные играют особую роль. Давайте коротко рассмотрим каждый из этих вариантов. Строки в апострофах и в кавычках — это одно и то же Кавычки и апострофы, окружающие строки, в языке РуФ)топ являются взаимозаменяемыми. То есть строковые литералы можно заключать как в апострофы, так и в кавычки — эти две формы представления строк ничем не отличаются и обе они возвращают объект того же самого типа. Например, следующие две строки совершенно идентичны: »> 'впгиЬЬвгу', "впгововгу" ( влгооовгу', 'впгоЬЬвгу') Причина наличия двух вариантов состоит в том, чтобы позволить вставлять в литералы символы кавычек и апострофов, не используя для этого символ обратного олеша.
Вы можете вставлять апострофы в строки, заключенные в кавычки, и наоборот: »> 'Кпвзпс'в', "Кпвцпт в С кптспт"в', "кптзпт'в") Между прочим, РуФоп автоматически объединяет последовательности строковых литералов внутри выражения, хотя нет ничего сложного в том, чтобы добавить оператор + между литералами и вызвать операцию конкатенации явно: »> тм)в = "Вввпвпз " 'от' " ыув" я неявная конкатенация »> ттт)в 'иеаптпд ог ыгв' Обратите внимание, если добавить запятые между этими строками, будет получен кортеж, а не строка. Кроме того, заметьте, что во всех этих примерах интерпретатор предпочитает выводить строки в апострофах, если их нет внутри строки.
Кавычки и апострофы можно вставлять в строки, экранируя их символом обратного слеша: 1В2 Глава 7. Строки »> 'кл1зьт1'в', "кл1яьт1" в" ("клтяьт'в', клтяьт'в ) Чтобы понять, зачем, вам необходимо узнать, как работает механизм экранирования вообще. Экранированные последовательности представляют служебные символы В последнем примере вставляемые в строку кавычка и апостроф предваряются символом обратного олеша. Это частный случай более общей формы: символы обратного олеша используются для вставки специальных символов, известных как экранированные последовательности. Экранированные последовательности позволяют вставлять в строки символы, которые сложно ввести с клавиатуры.
В конечном строковом объекте символ т и один или более следующих за ним символов замещаются единственным символом, который имеет двоичное значение, определяемое экранированной последовательностью. Например, ниже приводится строка из пяти символов, в которую вставлены символ новой строки и табуляции: »> в 'в1ЬЬ\Ьс' Последовательность тл образует единственный символ — байт, содержащий двоичное значение кода символа новой строки в используемом наборе символов (обычно АЗСП-код 10).
Аналогично последовательность \т замещается символом табуляции. Как будет выглядеть такая строка при печати, зависит от того, как она выводится. Функция автоматического вывода в интерактивной оболочке отобразит служебные символы как экранированные последовательности, а инструкция ргьлт будет интерпретировать их: »> в ' атлз|тс ' »> рг1л( в а Ь с Чтобы окончательно убедиться, сколько байтов входит в эту строку, можно воспользоваться встроенной функцией 1ел — она возвращает фактическое число байтов в строке независимо от того, как строка отображается на экране: »> 1вп(в) 5 Длина этой строки составляет пять байтов: она содержит байт АЯСП- символа а, байт символа новой строки, байт АЯСП-символа Ь и т.
д. Обратите внимание, что символы обратного спеша не сохраняются в памяти строкового объекта. Для представления служебных символов язык Ру1)топ обеспечивает полный набор экранированных последовательностей, перечисленных в табл. 7.2. )вз Литералы строк Таблица 72. Экранированные носледова>нельности Последовательность Назначение Игнорируется (продолжение на новой строке) Сам символ обратного олеша (остается один символ 1) Апостроф(остается один символ ') Кавычка (остается один символ ") Звонок Забой Переводформата Новая строка (перевод строки) Возврат каретки Горизонтальная табуляция Вертикальная табуляция Идентификатор 1В базы данных Юникода 1пен11пе 1з 1Ь 1п 1г 1т 1и(ш! 16-битовый символ Юникода в шестнадцатеричном представлении >,иПЬПЬ 32-битовый символ Юникода в шестнадцатеричном представлении' 10пьпп...
Шестнадцатеричное значение Восьмеричное значение Символ Мп!! (не признак конца строки) 1хпп 1ооо 10 Не является экранированной последовательностью (символ обратного олеша сохраняется) тлругое Экранированная последовательность |ОПЬЬП., состоит ровно из восьми ше- стнадцатеричных цифр (Ь). Последовательности то и >,О могут использо- ваться только в литералах строк символов Юникода. »> з = 'алев\Ос' »> з 'з1хООЬ1хссс' »> 1еп(з) 5 В языке РуЫтоп нулевой байт (символ пи!1) не является признаком завершения строки, как в языке С. Интерпретатор просто сохраняет в памяти как текст самой строки, так и ее длину. Фактически в языке Некоторые экранированные последовательности позволяют указы- вать абсолютные двоичные значения в байтах строк.