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

Лутц М. - Изучаем Python (1077325), страница 75

Файл №1077325 Лутц М. - Изучаем Python (Лутц М. - Изучаем Python) 75 страницаЛутц М. - Изучаем Python (1077325) страница 752018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

'Рг1пг 2 ** ЗЗХп, 'ргтп( вув.ратПХп', 'х = 2Хп ) Используемая здесь функция вар, которую мы будем рассматривать в следующей части книги„представляет собой инструмент, вызывающий заданную функцию для каждого элемента итерируемого объекта, напоминая тем самым генераторы списков, хотя и с ограниченными возможностями, потому что ей можно передать только функцию и нельзя указать произвольное выражение. Так как генераторы списков связаны с циклами Тот, мы займемся их исследованием ниже в этой главе, а затем еще раз вернемся к ним в следующей части книги. Функцию воггео, задействованную здесь, мы уже видели в работе в главе 4. Функция воггео — это относительно новая встроенная функция, которая использует итерационный протокол, — она напоминает метод списка вот(, но в качестве результата возвращает новый отсортированный список и способна работать с любым итерируемым объектом.

Существуют и другие, более новые встроенные функции, поддерживающие итерационный протокол. Например, функция вцв вычисляет сумму всех чисел в любом итерируемом объекте, а встроенные функции апу и в11 возвращают Тгце, если любой (апу) или все (а[1) элементы итерируемого объекта являются истинными значениями, соответственно: »> воггео([3, 2, 4, 1, 5, 0)) 4 другие контексте итераций [О, 1. 2, 3, 4. 5) »> вца([3, 2, 4, 1, 5, 0)) 15 »> апу(['враз', '', 'п1')) Тгце »> а11(['враз', '', 'пг')) Ра1зе Интересно, что область влияния итерационного протокола в языке Ру1[топ в настоящее время гораздо шире, чем было продемонстрировано 349 Приемы программирования циклов в примерах — любые встроенные инструменты в языке Ру1)(оп, которые выполняют обход объектов слева направо, по определению используют итерационный протокол при работе с объектами.

Сюда относятся даже такие замысловатые инструменты, как встроенные функции 11з1 и 1ар)е (которые создают новые объекты из итерируемых объектов), строковый метод ) о1п (который вставляет подстроку между строками, содержащимися в итерируемом объекте) и даже операция присваивания последовательностей. Благодаря этому все они могут применяться к открытому файлу и автоматически выполнять чтение по одной строке за раз: »> 11в1(преп('всг1р11.ру')) ['1арсг1 вувхп', 'рпп1 вув.рагс'хп', 'х = 2хп', 'ргзпг 2 ** 33'~п') »> 1ср)е(преп('всгзр1к ру')) ('1ерсг1 пуз~я', 'рг1пг вуз ра1а~п', 'х = 2~я, 'ргзп1 2 ° * 33~с') »> 'аа'.)с1п(преп('всгьр11,ру )) 'зпрог1 Вуз'Хпаарг1п1 вув,ра1П'хпаах = 2хпаарггп1 2 * ° 33'хп' »> а, Ь, с, С = среп('всг1р11.ру') »>а, с ('!арсг1 вуаля', 'рг!пг 2 * 33'хп') Итераторы, определяемые пользователем Итераторы мы еще будем рассматривать в главе 17, вместе с функциями, и в главе 24, когда будем изучать классы.

Как будет показано позднее, существует возможность превратить пользовательскую функцию в итерируемый объект с помощью инструкции узе14. Генераторы списков также поддерживают протокол с помощью выражений-генераторов, а пользовательские классы можно сделать итерируемыми за счет методов перегрузки операторов 11ег и ре111ез . Итераторы, определяемые пользователем, позволяют использовать любые объекты и операции в любом из итерационных контекстов, с которыми мы встретились здесь. Приемы программирования циклов Цикл (о~ относится к категории счетных циклов. Обычно он выглядит проще и работает быстрее, чем цикл ия1)е, поэтому его нужно рассматривать в самую первую очередь, когда возникает необходимость выполнить обход последовательности.

Однако существуют такие ситуации, когда необходимо выполнять обход каким-то особенным способом. Например, как быть, когда необходимо выполнить обход каждого второго или каждого третьего элемента в списке, или попутно выполнить изменения в списке? Или когда необходимо реализовать параллельный обход более чем одной последовательности в одном и том же цикле гог? Такие уникальные ситуации всегда можно запрограммировать с помощью цикла ил(1е и извлечения элементов вручную, но Рузйоп предос- 350 Глаза 13. Циклы игппе и (ог тавляет две встроенные возможности, позволяющие управлять обходом элементов в цикле Гог: ° Встроенная функция гзпре возвращает список последовательно увеличивающихся целых чисел, которые можно использовать в качестве индексов внутри цикла Го г.г ° Встроенная функция 210 возвращает список кортежей, составленных из элементов входных списков с одинаковыми индексами, который может использоваться для одновременного обхода нескольких последовательностей в цикле Гог.

Обычно циклы Гог выполняются быстрее, чем аналогичные им счетные циклы на базе инструкции ип]]е, поэтому везде, где только возможно, лучше пользоваться такими инструментами, которые позволят использовать цикл (ог, Рассмотрим каждый из этих встроенных инструментов по очереди.

Счетные циклы: )йгЫ!е и галяе Функция гапре является по-настоящему универсальным инструментом, который может использоваться в самых разных ситуациях. Чаще всего она используется для генерации индексов в цикле Гс г, но вы можете использовать ее везде, где необходимы списки целых чисел: »> гапзэ(5), гапзе(2, 5), гапзе(0, 10, 2) ([О, 1, 2, 3, 4] [2 3 4] [О 2 4 6 8]) Функция гапре с одним аргументом генерирует список целых чисел в диапазоне от нуля до указанного в аргументе значения, не включая его.

Если функции передать два аргумента, первый будет рассматриваться как нижняя граница диапазона. Необязательный третий аргумент определяет шаг — в этом случае интерпретатор будет добавлять величину шага при вычислении каждого последующего значения [по умолчанию шаг равен 1). Существует возможность воспроизводить последовательности чисел в диапазоне отрицательных значений и в порядке убывания: »> гзпзз(-5, 5) [-5, -4, -3, -2, -1, О, 1, 2, 3, 4] Современные версии Ру(поп предоставляют также встроенную функцию х гз псе, которая генерирует индексы по одному вместо того, чтобы создавать вх сразу все и сохранять в списке, как это делает функция гапзе. Функция хгапзе не дает никакого преимущества в скорости, но она удобна в смысле экономии памяти, если приходится генерировать огромное число значений. На момент написания этих строк ходят слухи, что в версии Ру()гоп 3.0 функция х галсе исчезнет, а функция гапзе будет преобразована э объект-генератор, поддерживающий итерационный протокол для воспроизведения одного элемента за раз.

Дополнительную информацию вы найдете в примечаниях к выпуску Ру(лоп 3.0. 351 Приемы программирования циклов »> галде(5, -5, -1) [5, 4, 3, 2, 1, О, -1, -2, -3, -4] »> Гог 1 1п галде(3); рг1п1 1, 'Ругоопв' 0 Ругаопз 1 Рутоопв 2 Рутяопв Функция галде также часто используется для косвенного обхода после- довательностей. Самый простой и самый быстрый способ выполнить обход последовательности заключается в использовании цикла Рог, когда основную работу выполняет интерпретатор: »> Х = 'зрае' »> Рог 11ее 1п Х: рг1п1 11ее, № ПРостейший цикл в р а ю При таком использовании все задачи, касающиеся выполнения итера- ций, решаются внутренними механизмами цикла Рог.

Если вам дейст- вительно необходимо явно управлять логикой доступа к элементам, вы можете использовать цикл шл1]е: »>1 0 »> ша11е 1 < 1еп(Х); рг1пт ХШ,; 1 += 1 № Обход с помошвю цикла шл1!е в р а ш Однако управлять индексами вручную можно и в цикле Рог, если ис- пользовать функцию гапде для воспроизведения списка индексов: »> Х врдш »> 1еп(Х) 4 »> галде(1еп(Х)) [О, 1, 2, 3] »> »> Рог 1 1п галде(1еп(Х)): рг1п1 Х[1], № Длина строки № Все допустимые сившвнип в К № Извлечение злвивнтов вручную в р а а В этом примере выполняется обход списка смещений в строке Х, а не фактических элементов строки — нам пришлось внутри цикла обра- щаться к строке Х, чтобы извлечь каждый элемент.

Такое использование функции галде само по себе может быть полезным, однако чаще всего она используется в циклах Рог. Прежде всего она обеспечивает простой способ повторить действие определенное число раз. Например, чтобы вывести три строки, можно использовать функцию галде для создания соответствующего количества целых чисел: Глава 13. Циклы иг)п1е и [ог Обход части последовательности: гапяе Последний пример в предыдущем разделе вполне работоспособен, ио он выполняется гораздо медленнее, чем мог бы. Кроме того, нам пришлось выполнить больше работы, чем требуется для решения такой задачи. Если вы не предъявляете особых требований к индексам, всеГДа ЛУЧШЕ ИСПОЛЬЗОВатЬ ПРОСтвйШУЮ ФОРМУ ЦИКЛа тот — ИСПОЛЬЗУйтЕ цикл рог вместо иб[]е везде, где только возможно, и используйте функцию гапбе в циклах рог, только если это действительно необходимо.

Следующее простое решение является лучшим: »> Гог 11еа 1п Хл рг1п1 11еа, Р Простейшая итерация Однако прием, представленный в предшествующем примере, позволяет нам управлять порядком обхода последовательности, например пропускать элементы: »> 8 'аосаетра1]К' »> гапра(0, 1еп(3), 2) [О, 2, 4, б, 8, 10] »> Гог 1 1п гапае(0, )еп(8), 2): рг1пг 8[1], а с е 0 1 к Здесь в цикле выбирается каждый второй элемент строки 8 при обходе списка значений, сгенерированных функцией гапбв.

Чтобы извлечь каждый третий элемент, достаточно изменить третий аргумент функции гапбе, передав в нем значение 3, и т. д. Таким образом, функция гапбе позволяет пропускать элементы, сохраняя при этом простоту цикла рог. Однако на сегодняшний день это, пожалуй, не самый лучший способ. Если вам действительно необходимо пропустить элементы последовательности, можно использовать расширенную форму операции извлечения среза с тремя пределами, представленную в главе 7, которая обеспечивает более простой путь к достижению цели.

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

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

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

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