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

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

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

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

Попробуйте несколько раз вызвать функции в интерактивной оболочке, чтобы поэксперимен- тировать с ними самостоятельно: % рутаоп в!пв.ру аа [1, 1] Обратите внимание, что ни один из этих трех вариантов не выполняет проверку ситуации, когда функции не передается ни одного аргумента. Такую проверку можно было бы предусмотреть, но в этом нет никакой необходимости — во всех трех решениях интерпретатор автоматически возбудит исключение, если та или иная функция не получит ни одного аргумента. В первом случае исключение будет возбуждено при попытке получить нулевой элемент; во втором — когда обнаружится несоответствие списка аргументов; и в третьем — когда функция попытается вернуть нулевой элемент.

Это именно то, что нам нужно, потому что эти функции поддерживают поиск среди данных любого типа и не существует какого-то особого значения, которое можно было бы вернуть в качестве признака ошибки. Из этого правила есть свои исключения (например, когда приходится выполнить дорогостоящие действия, прежде чем появится ошибка), но вообще лучше исходить из предположения, что аргументы не будут вызывать ошибок в работе программного кода функции, и позволить интерпретатору возбуждать исключения, когда этого не происходит.

Дополнительные баллы Студенты и читатели могут получить дополнительные бавлы, если изменят зти функции так, что они будут отыскивать не минимальное, амаксимальное значение. Сделать это достаточно просто: в первых двух версиях достаточно заменить < на >, а третья версия должна возвращать не элемент тес[0], а элемент твр[-1]. Дополнительные баллы будут начислены тем, кто догадается изменить имя функции на «шах» (хотя это совершенно необязательно).

Кроме того, вполне возможно обобщить функцию так, что она будет отыскивать либо минимальное, либо максимальное значение, определяя отношения элементов за счет интерпретации строки выражения с помощью таких средств, как встроенная функция еча] (подробности в руководстве к библиотеке), или передавая произвольную функцию 4зз Специальные режимы сопоставления аргументов сравнения. В файле лт(потах ру содержится реализация последнего ва- рианта: оет атпаах(тевт, *агре); гев = агдв[0] тпг дгд 1п агре[1;].' тт тевт(агд, гев]; гев = агд гетпгп гев 4 см, гакхег ]ааооа оег 1еввтпап(х, у). гетогп х < у оет дгтгтпап(х, у): гетигп х > у рг1пт а1паах(1еввтяап, 4, 2, 1, 5, б, 3) 1т Тестирование ргтпт а(паах(дгтгтяап, 4, 2, 1, 5, б, 3) % рутооп а1паах.ру 1 б Функции — это одна из разновидностей объектов, которые могут передаваться в функции, как в этом случае.

Например, чтобы заставить функцию отыскивать максимальное (или любое другое) значение, мы могли бы просто передать ей нужную функцию сеет. На первый взгляд может показаться, что мы делаем лишнюю работу, однако главное преимущество такого обобщения функций (вместо того, чтобы содержать две версии, отличающиеся единственным символом) заключается в том, что в будущем нам может потребоваться изменить одну функцию, а не две. Заключение Конечно, это было всего лишь упражнение. В действительности нет никаких причин создавать функции в1п и вах, потому что обе они уже имеются в языке Руб]топ! Встроенные версии функций работают практически так же, как и наши, но они написаны на языке С для получения более высокой скорости работы. Более полезный пример.

"универсальные функции Теперь рассмотрим более полезный пример использования специальных режимов сопоставления аргументов. В конце предыдущей главы мы написали функцию, которая возвращала пересечение двух последовательностей (она отбирала элементы, общие для обеих последовательностей). Ниже приводится версия функции, которая возвращает пересечение произвольного числа последовательностей (одной или более), где используется механизм передачи произвольного числа аргументов в форме *агдв для сбора всех передаваемых аргументов в виде коллекции.

Все аргументы передаются в тело функции в составе кортежа, поэтому для их обработки можно использовать простой цикл Тсг. Ради интереса мы напишем функцию, возвращающую объединение, 434 которая также принимает произвольное число аргументов и собирает вместе все элементы, имеющиеся в любом иэ операндов: ьгеак Оет цшоп(*аг93): гез = [] Гог вец 1п агдв: № Для всех аргуиентов Гог х тп вер: № Для всех элеиентов 11 пот х (п гез: гев.аррепс(х) № Добавить новый элемент а результат гетцгп гев Поскольку эти функции могут использоваться многократно (и они слишком большие, чтобы вводить их в интерактивной оболочке), мы сохраним их в модуле с именем т1ег2ру (подробнее о модулях рассказывается в пятой части книги). В обе функции аргументы передаются в виде кортежа а где.

Как и оригинальная версия 1 птегзест, обе они работают с любыми типами последовательностей. Ниже приводится пример обработки строк, последовательностей разных типов и случай обработки более чем двух последовательностей: % ру1эоп »> ггоз 1п1ег2 1арог1 1птегвес1, цп1оп »> в1, з2, вз "ЗРАН", "ЗСАН", "ЗСАИ" »> 1п1егвес1(в1, в2), цп1оп(в1, в2) № Два операнда (['8', 'А', 'М'], ['8', 'Р', 'А', 'М', 'С']) »> 1птвтевот([1,2,3], (1,4)) [1] № Сиешивание типов № Три операнда о Следует заметить, что в языке Ру()топ появился новый тип дан„г ° ных — множества (опнсывается в главе 5), поэтому, строго говоря, нн одна нз втнх Функций больше не требуется, — онн включены в книгу только для демонстрации подходов к программированию функций.

(Так как Ру()топ постоянно улучшается, наблюдается странная тенденция — мон книжные примеры делаются устаревшими с течением времени!) Оет тптегвест(*агдв): гев = [] Гог х 1п аг9в[0]; Рог о1пег 1п агдв[1;]: 1№ х пот тп ожег: е1ве: гев.аррепц(х) гвтцгп гвз »> 1птегввс1(в1, в2, вз) ['8', 'А', 'М'] »> цп1оп(в1, в2, вз) ['8', 'Р', 'А', 'М', 'С', ' 1'] Глава 16. Области видимости и аргументы № Сканировать первую последовательность № Во всех остальных аргуиентах № Общий элеиент? № Нет; прервать цикл № Да: добавит~ элеиент а конец Специальные режимы сопоставления аргументов Сопоставление аргументов: практические детали Ниже приводится несколько правил в языке РуФ)топ, которым вам необходимо следовать, если у вас появится потребность использовать специальные режимы сопоставления аргументов: ° В вызове функции все аргументы, которые передаются не по ключу (лазе), должны находиться в начале списка, далее должны следовать аргументы, которые передаются по ключу (лавегза1ое), вслед за ними должна следовать форма *лазе и, наконец, * ° лаве.

° В заголовке функции аргументы должны стоять в том же самом порядке: обычные аргументы (пзве), вслед за ними аргументы со значениями по умолчанию (лазе=за1ие), далее форма *паве, если необходимо, и, наконец, форма **лазе. Если поставить аргументы в любом другом порядке, вы получите сообщение о синтаксической ошибке, потому что в этих случаях комбинация получается неоднозначной. Сам интерпретатор использует следующий порядок сопоставления аргументов перед выполнением операций присваивания: 1. Определяются позиционные аргументы, которые передаются не по ключу.

2. Определяются аргументы, которые передаются по ключу, и производится сопоставление имен. 3. Определяются и помещаются в кортеж *язве дополнительные аргументы, которые передаются не по ключу. 4. Определяются и помещаются в словарь **лазе дополнительные аргументы, которые передаются по ключу.

5. Определяются аргументы, имеющие значения по умолчанию, которые отсутствуют в вызове. После этого интерпретатор убеждается, что в каждом аргументе передается единственное значение, в противном возбуждает исключение. Это действительно так же сложно, как выглядит, но изучение алгоритма сопоставления аргументов в языке РуФ)топ поможет вам разобраться с некоторыми сложными случаями, особенно когда одновременно используются несколько режимов. Дополнительные примеры со специальными режимами сопоставления приводятся в упражнениях в конце четвертой части. Как видите, режимы сопоставления аргументов могут быть весьма сложными. Но использовать их совершенно необязательно — вы можете ограничиться исключительно позиционными аргументами и это, пожалуй, будет наилучший выбор.

Однако некоторые инструменты языка Ру(Ьоп используют эти режимы, поэтому их понимание играет важную роль. Глава )6. Области видимости и аргументы 436 Придется держать в уме: аргументы, передаваемые по ключу Аргументы, которые передаются по ключу, играют важную роль в библиотеке Т)с(п$ег, которая фактически стала стандартным средством для разработки графического интерфейса в языке РуТЬоп. Мы познакомимся с Т)с(п$ег далее в этой книге, но в качестве предварительного знакомства замечу, что при использовании этой библиотеки для установки значений параметров компонентов графического интерфейса используются аргументы, передаваемые по ключу.

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

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

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

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