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

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

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

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

Не путайте синтаксические конструкции лазе=ив)ье в заголовке функции и в вызове функции — в вызове она означает использование режима сопоставления значения с именем аргумента по ключу, а в заголовке 428 Глава 16. Области видимости и аргументы определяет значение по умолчанию для необязательного аргумента. В обоих случаях это не инструкция присваивания — это особая синтаксическая конструкция для этих двух случаев, которая модифицирует механику сопоставления значений с именами аргументов, используемую по умолчанию.

Примеры произвольного числа аргументов Последние два расширения * и ** механизма сопоставления аргументов и их значений предназначены для поддержки возможности передачи произвольного числа аргументов функциям. Оба варианта могут появляться как в определениях функций, так и в их вызовах, и в обоих случаях они имеют сходные назначения. Сбор аргументов в коллекцию В первом случае, в определении функции, выполняется сборка лишних позиционных аргументов в кортеж: »> Свт Г(*агре): ргтпт агцв При вызове этой функции интерпретатор Ру$)топ соберет все позиционные аргументы в новый кортеж и присвоит этот кортеж переменной агцв. Это будет обычный объект кортежа, поэтому из него можно извлекать элементы по индексам, выполнять обход в цикле Гог и т.

дл >» г() () »> Г(1) (1,) »> Г(1,2,3,4) (1, 2, 3, 4) Комбинация ** дает похожий результат, но применяется при передаче аргументов по ключам — в этом случае аргументы будут собраны в новый словарь, который можно обрабатывать обычными инструментами, предназначенными для работы со словарями. В определенном смысле форма ** позволяет преобразовать аргументы, передаваемые по ключам, в словари, которые можно будет обойти с помощью метода 'пвув, итераторов словарей и т.

дл »> саг г(**агца); ргтпт агав »> г() ( ) »> Г(4=1, 0=2) ('а' 1, '0': 2) Наконец, в заголовках функций можно комбинировать обычные аргументы, * и ** для реализации чрезвычайно гибких сигнатур вызова: »> сет Г(а, рагца, *Матра): рг1пт а, рагца, пагца 429 Специальные режимы сопоставления аргументов »> Г(1, 2, 3, х 1, у=2) 1 (2, 3) ('у': 2, 'х'; 1) Фактически все эти формы передачи аргументов можно объединять в еще более сложные комбинации, которые на первый взгляд могут показаться неоднозначными — к этой идее мы еще вернемся ниже, в этой главе.

А сейчас посмотрим, как используются формы * и ** в вызовах функций. Извлечение аргументов из коллекции В последних версиях Руд)топ форму * можно также использовать в вызовах функций. В этом случае данная форма передачи аргументов имеет противоположный смысл по сравнению с применением этой формы в определениях функций — она распаковывает, а не создает коллекцию аргументов. Например, можно передать в функцию четыре аргумента в виде кортежа и позволить интерпретатору распаковать их в отдельные аргументы: »> Свт Гспс(а, Ь, с, С).

рг(п1 а, Ь, с, С »> агав = (1, 2) »> агав += (3, 4) »> Гспс( агдв) 1 2 3 4 Точно также форма ** в вызовах функций распаковывает словари пар ключ/значение в отдельные аргументы, которые передаются по ключу: »> агав = ('а'; 1, 'Ь': 2, 'с': 3) »> агав['С') = 4 »> Гспс( ° *агав) 1 2 3 4 Здесь также можно очень гибко комбинировать в одном вызове обыч- ные позиционные аргументы и аргументы по ключу: »> Гспс(*(1, 2), **('С': 4, 'с': 4)) 1 2 4 4 »> Гипс(1, ° (2, 3), ('С': 4)) 1 2 3 4 »> Гспс(1, с=з, *(2,), **('С': 4)) 1 2 3 4 Такого рода программный код удобно использовать, когда заранее невозможно предсказать число аргументов, которые могут быть переданы функции — вы можете собирать коллекцию аргументов во время исполнения и вызывать функцию таким способом. Не путайте синтаксические конструкции */** в заголовках функций и в их вызовах — в заголовке они означают сбор всех лишних аргументов в коллекцию, а в вызове выполняют распаковку коллекций в отдельные аргументы.

4зо Глава 16. Области видимости и аргументы Мы еще вернемся к этим формам в следующей главе, когда будем рас- сматривать встроенную функцию арр1у (для замены которой, в значи- тельной степени, предназначены эти конструкции). бвг гяяс(враз, вррв, (оав(=О, лаю=О): № первые г являются обяэательныяя рггят (враз, еррв, тоавц Вае) Голс(1, 2) Гияс(1, лаю=1. арра=с) Галс(враз=1, арра=О) Гялс((оав(=1, арра=2, ярая=3) Гвяс(1, 2, 3, 4) № Выведет. ГУ, г, О, О) № Выведет: Гт, О, О, 1) № Выведет: Г7, О, О, О) № Выведет. ГЗ, г, 1, О) № Выведе Г), г, 3, 4) Обращаю снова ваше внимание: когда в вызовах используются ключи аргументов, порядок следования аргументов не имеет значения, потому что сопоставление выполняется по именам, а не по позициям. Вызывающая программа обязана передать значения для аргументов враз и еррв, а сопоставление может выполняться как по позиции, так и по ключам.

Обратите также внимание на то, что форма яавеава1ое имеет разный смысл в вызове функции и в инструкции бег (ключ — в вызове и значение по умолчанию — в заголовке). Функция поиска минимума Чтобы придать обсуждению больше конкретики, выполним упражнение, которое демонстрирует практическое применение механизмов сопоставления аргументов. Предположим, что вам необходимо написать функцию, которая способна находить минимальное значение из произвольного множества аргументов с произвольными типами данных.

То есть функция должна принимать ноль или более аргументов— столько, сколько вы пожелаете передать. Более того, функция должна работать со всеми типами объектов, имеющимися в языке Рув)топ1 числами, строками, списками, списками словарей, файлами и даже ((ояе. Первое требование представляет собой обычный пример того, как можно найти применение форме * — мы можем собирать аргументы в кортеж и выполнять их обход с помощью простого цикла Гог. Второе требование тоже не представляет никакой сложности: все типы объектов поддерживают операцию сравнения, поэтому нам не требуется учитывать типы объектов в функции (полиморфизм в действии) — мы можем просто слепо сравнивать объекты и позволить интерпретатору самостоятельно выбрать корректную операцию сравнения.

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

В случае их отсутствия интерпретатор присвоит именам тоав( и паз значения по умолчанию, указанные в заголовке: Специальные режимы сопоставления аргументов Основное задание Ниже представлены три способа реализации этой функции, из которых, по крайней мере, один был предложен студентом: ° Первая версия функции извлекает первый аргумент (а где — зто кортеж) и обходит остальную часть коллекции, отсекая первый элемент (нет никакого смысла сравнивать объект сам с собой, особенно, если это довольная крупная структура данных).

° Вторая версия позволяет интерпретатору самому выбрать первый аргумент н остаток, благодаря чему отсутствует необходимость извлекать первый аргумент и получать срез. ° Третья версия преобразует кортеж в список с помощью встроенной функции )тат и использует метод списка вогт. Метод во гт написан на языке С, поэтому иногда он может обеспечивать более высокую производительность по сравнению с другими версиями функции, но линейный характер сканирования в первых двух версиях в большинстве случаев обеспечивает им более высокую скорость.' Файл лттлз.ру содержит реализацию всех трех решений: Сет атпт[*агдз); геэ = агдз[0] гог агд [и агдз[т;]: тт агд < гез; гез = агд гетега геэ Сет этп2(ттгэт, .гезт): Гог агд тп геат: [г агд < ттгзт; т[гзт = агд гетигп гтгы В действительности все очень ие просто. Функция аог«в языке Рут)тол написана иа языке С и реализует высокоэффективный алгоритм, который пытается использовать существующий порядок следования сортируемых элементов.

Этот алгоритм называется «$нпзогт» в честь его создателя Тима Петерса (Тип Ре«ега), а в его документации говорится, что время от времени он показывает «сверхъестественную производительность» (очеиь неплохую для сортировки!). Однако сортировка по своей природе является экспоненциальной операцией (в процессе сортировки необходимо делить последовательность иа составляющие и снова объединять их много раз), тогда как другие версии используют линейные алгоритмы сканирования слева направо. В результате сортировка выполняется быстрее, когда элементы последовательности частично упорядочены, и медленнее в других случаях. Даже прн всем при этом производительность самого интерпретатора может изменяться по времени и тот факт, что сортировка реализована на языке С, может существенно помочь.

Для более точного анализа производительности вы можете использовать модули т [ее и т! зетт, с которыми мы поаиакомимся в следующей главе. Глава 16. Области видимости и аргументы Оет в!ПЗ(*аг9в); твр = !гвт(аг9в) твр.вогт() гетогп !ар[0] Ф или, в Рутпоп 2.4+: го!игл аогтоо(агда)(07 ргтпт «пп1(3,4, 1,2) рг(пт в!П2("00", "аа") ргтпт в!пЗ([2,2], [1,1], [3,3]) Все три решения дают одинаковые результаты.

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

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

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

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