Главная » Просмотр файлов » Марк Лутц - Изучаем Python, Четвертое издание

Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 57

Файл №1184811 Марк Лутц - Изучаем Python, Четвертое издание (Марк Лутц - Изучаем Python, Четвертое издание) 57 страницаМарк Лутц - Изучаем Python, Четвертое издание (1184811) страница 572020-08-21СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 57)

Припрограммировании на этом языке практичность часто берет верх над эстетичностью.Строки в действииКак только с помощью литеральных выражений, с которыми мы только чтопознакомились, строка будет создана, вам наверняка потребуется выполнятькакие-либо операции с ее участием. В этом и в следующих двух разделах демонстрируются основы работы со строками, форматирование и методы – первая линия инструментальных средств обработки текста в языке Python.Базовые операцииДавайте запустим интерактивный сеанс работы с интерпретатором Python,чтобы проиллюстрировать базовые операции над строками, которые были перечислены в табл. 7.1.

Строки можно объединять с помощью оператора конкатенации + и дублировать с помощью оператора повторения *:% python>>> len(‘abc’)# Длина: число элементов3>>> ‘abc’ + ‘def’ # Конкатенация: новая строка‘abcdef’>>> ‘Ni!’ * 4# Повторение: подобно “Ni!” + “Ni!” + ...‘Ni!Ni!Ni!Ni!’Формально операция сложения двух строковых объектов создает новый строковый объект, объединяющий содержимое операндов. Операция повторениянапоминает многократное сложение строки с самой собой.

В обоих случаяхPython позволяет создавать строки произвольного размера – нет никакой необходимости предварительно объявлять что бы то ни было, включая размерыструктур данных.1 Встроенная функция len возвращает длину строки (или любого другого объекта, который имеет длину).1В отличие от массивов символов в языке C, при работе со строками в языке Pythonвам не нужно выделять или управлять памятью массивов – вы просто создаете объекты строк, когда в этом возникает необходимость, и позволяете интерпретатору самому управлять памятью, выделяемой для этих объектов.

Как уже говорилось в главе 6, Python автоматически освобождает память, занятую ненужными объектами,используя стратегию сборки мусора, основанную на подсчете количества ссылок.Каждый объект следит за количеством имен, структур данных и другими компонентами, которые ссылаются на него. Когда количество ссылок уменьшается до нуля,интерпретатор освобождает память, занятую объектом.

Это означает, что интерпретатору не требуется останавливаться и просматривать всю память в поисках неиспользуемого пространства (дополнительный компонент сборки мусора собирает также циклические объекты).218Глава 7. СтрокиОперация повторения на первый взгляд выглядит несколько странно, но онаочень удобна в очень широком диапазоне применений. Например, чтобы вывести строку из 80 символов дефиса, можно самому сосчитать до 80, а можновозложить эту работу на плечи интерпретатора:>>> print(‘------- ...много дефисов... ---’) # 80 дефисов, сложный способ>>> print(‘-’ * 80)# 80 дефисов, простой способОбратите внимание: здесь работает механизм перегрузки операторов: мы используем те же самые операторы + и *, которые используются для выполненияопераций сложения и умножения с числами.

Интерпретатор выполняет требуемую операцию, потому что ему известны типы объектов, к которым применяются операции сложения и умножения. Но будьте внимательны: правила нетак либеральны, как может показаться. Например, интерпретатор не позволяет смешивать строки и числа в выражениях сложения: ‘abc’ + 9 вызовет ошибкувместо того, чтобы автоматически преобразовать число 9 в строку.Как показано в последней строке табл. 7.1, допускается выполнять обход элементов строки в цикле, используя инструкцию for, и проверять вхождение подстроки в строку с помощью оператора выражения in, который, по сути, выполняет операцию поиска.

В случае поиска подстрок оператор in напоминает методstr.find(), который рассматривается ниже, в этой же главе, – с тем отличием,что он возвращает логический результат, а не позицию подстроки в строке:>>> myjob = “hacker”>>> for c in myjob: print(c, end=’ ‘), # Обход элементов строки в цикле...h a c k e r>>> “k” in myjob# НайденоTrue>>> “z” in myjob# Не найденоFalse>>> ‘spam’ in ‘abcspamdef’# Поиск подстроки, позиция не возвращаетсяTrueОператор цикла for присваивает переменной очередной элемент последовательности (в данном случае – строки) и для каждого элемента выполняет одну илиболее инструкций. В результате переменная c превращается в своего рода курсор, который постепенно перемещается по строке.

Далее в этой книге (особеннов главах 14 и 20) мы подробнее рассмотрим средства выполнения итераций, подобных этой и другим, перечисленным в табл. 7.1.Доступ по индексам и извлечение подстрокиТак как строки определены как упорядоченные коллекции символов, мы можем обращаться к элементам строк по номерам позиций. В языке Python символы извлекаются из строк с помощью операции индексирования – указаниемчислового смещения требуемого компонента в квадратных скобках после имени строки. В результате операции вы получаете строку, состоящую из одногосимвола, находящегося в указанной позиции.Как и в языке C, в языке Python смещения символов в строках начинают исчисляться с 0, а последний символ в строке имеет смещение на единицу меньше длины строки. Однако, в отличие от C, Python также позволяет извлекатьэлементы последовательностей, таких как строки, используя отрицательныесмещения.

Технически отрицательное смещение складывается с длиной стро-219Строки в действиики, чтобы получить положительное смещение. Отрицательные смещения можно также представить себе как отсчет символов с конца строки. Например:>>> S = ‘spam’>>> S[0], S[-2]# Индексация от начала или от конца(‘s’, ‘a’)>>> S[1:3], S[1:], S[:-1] # Получение среза: извлечение подстроки(‘pa’, ‘pam’, ‘spa’)В первой строке определяется строка из четырех символов и связывается с именем S. В следующей строке выполняются две операции доступа к элементам поиндексам: S[0] возвращает элемент со смещением 0 от начала (односимвольнуюстроку ‘s’), а S[-2] возвращает элемент со смещением 2 от конца (что эквивалентно смещению (4 + (-2)) от начала).

Смещения и срезы отображаются на элементы последовательности, как показано на рис. 7.1.1[начало:конец]Индексы указывают позиции, в которых будут выполнены «разрезы»01S2LIСEOFSPA M[::]По умолчанию используются начало и конец последовательностиРис. 7.1. Смещения и срезы: положительные смещения отсчитываютсяот левого конца (первый элемент имеет смещение 0), а отрицательные  отсчитываются от правого конца (последний элемент имеет смещение –1).При выполнении операций индексации и получения среза можно использовать любые виды смещенийПоследняя строка в предыдущем примере демонстрирует операцию извлечения среза (slicing).

Получение среза можно считать некоторой формой синтаксического анализа, особенно при работе со строками, – она позволяет извлекать целые участки (подстроки) за одно действие. Операция получения срезаможет использоваться для извлечения столбцов данных, обрезания ведущихи завершающих блоков текста и тому подобного. Позже, в этой же главе, мырассмотрим другой пример использования операции получения среза для синтаксического анализа строки.Как же выполняется операция получения среза? Когда производится индексирование объекта последовательности, такого как строка, парой смещений,разделенных двоеточием, интерпретатор Python возвращает новый объект,содержащий непрерывную область, определяемую парой смещений. Значение смещения слева от двоеточия обозначает левую границу (включительно),а справа – верхнюю границу (она не входит в срез). Интерпретатор извлека-1Математически более подготовленные читатели (и студенты в моих классах) иногдаобнаруживают здесь небольшую асимметрию: самый левый элемент имеет смещение 0, а самый правый имеет смещение –1.

Увы, в языке Python отсутствует такаявещь, как значение –0.220Глава 7. Строкиет все элементы от нижней границы до верхней, но верхняя граница в срез невключается. Если левая и правая граница опущены, по умолчанию принимаются значения, равные 0 и длине объекта соответственно, из которого извлекается срез.Например, для только что рассмотренного примера выражение S[1:3] вернет элементы со смещениями 1 и 2. То есть будут извлечены второй и третий элементы,и операция остановится перед четвертым элементом со смещением, равным 3.Выражение S[1:] вернет все элементы, расположенные за первым, – за значениеверхней границы, которая в выражении опущена, по умолчанию принимаетсядлина строки.

Наконец, выражение S[:-1] вернет все элементы, кроме последнего, – за значение нижней границы по умолчанию принимается 0, а индекс –1соответствует последнему элементу, который в срез не включается.Все это может показаться на первый взгляд слишком замысловатым, но операции извлечения отдельных элементов и срезов превратятся в простые и мощные инструменты, как только вы ими овладеете. Если вы забыли, как выполняется срез, попробуйте получить его в интерактивном сеансе. В следующейглаве вы увидите, что существует возможность изменить целый раздел определенного объекта одной инструкцией, достаточно лишь выполнить операциюприсваивания срезу.

Далее приводится краткий обзор для справки:•• Операция индексирования (S[i]) извлекает компоненты по их смещениям:•• Первый элемент имеет смещение 0.•• Отрицательные индексы определяют смещения в обратном порядке – отконца, или справа.•• Выражение S[0] извлекает первый элемент.•• Выражение S[-2] извлекает второй с конца элемент (так же, как и выражение S[len(S)-2]).•• Операция извлечения подстроки (S[i:j]) извлекает непрерывный разделпоследовательности:•• Элемент с индексом, равным верхней границе, не включается в срез.•• Если границы не указаны, по умолчанию они принимаются равными0 и длине последовательности.•• Выражение S[1:3] извлекает элементы со смещениями от 1 до 3 (невключая элемент со смещением 3).•• Выражение S[1:] извлекает элементы, начиная со смещения 1 и до конца (длина последовательности).•• Выражение S[:3] извлекает элементы, начиная со смещения 0 и до 3 (невключая его).•• Выражение S[:-1] извлекает элементы, начиная со смещения 0 и до последнего (не включая его).•• Выражение S[:] извлекает элементы, начиная со смещения 0 и до конца, – это эффективный способ создать поверхностную копию последовательности S.Последний пункт списка – это самый обычный трюк: с его помощью создаетсяполная поверхностная копия объекта последовательности, то есть объект с темже значением, но расположенный в другой области памяти (подробнее о ко-Строки в действии221пировании объектов рассказывается в главе 9).

Этот прием не очень полезенпри работе с неизменяемыми объектами, такими как строки, но его ценностьвозрастает при работе с объектами, которые могут изменяться, – такими, каксписки.В следующей главе вы узнаете, что синтаксис операции доступа к элементампоследовательности по смещениям (квадратные скобки) также применим длядоступа к элементам словарей по ключам – операции выглядят одинаково, ноимеют разную интерпретацию.Расширенная операция извлечения подстроки:третий пределВ версии Python 2.3 в операцию извлечения подстроки была добавлена поддержка необязательного третьего индекса, используемого как шаг (иногда называется как шаг по индексу).

Величина шага добавляется к индексу каждогоизвлекаемого элемента. Полная форма записи операции извлечения подстроки теперь выглядит так: X[I:J:K]. Она означает: «Извлечь все элементы последовательности X, начиная со смещения I, вплоть до смещения J-1, с шагом K».Третий предел, K, по умолчанию имеет значение 1, именно по этой причинев обычной ситуации извлекаются все элементы среза, слева направо.

Характеристики

Тип файла
PDF-файл
Размер
12,21 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6294
Авторов
на СтудИзбе
314
Средний доход
с одного платного файла
Обучение Подробнее