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

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

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

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

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

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

Мы также познакомились с дополнительными особенностями областей видимости и аргументов, например с областями видимости вложенных функций и аргументами, которые передаются по ключу. Наконец мы познакомились с некоторыми рекомендациями по проектированию приложений (стремиться минимизировать количество глобальных переменных и избегать изменений переменных в соседних файлах) и увидели, что изменяемые объекты в аргументах проявляют то же самое поведение, как и другие разделяемые ссылки на объекты,— если функции явно не передается копия объекта, воздействие непо- 437 Закрепление пройденного средственно на изменяемый объект может отразиться на вызывающей программе.

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

Закрепление пройденного Контрольные вопросы 1. Что выведет следующий фрагмент и почему7 »> Х = 'Зраа' >» заг гппс(): рг1п1 Х »> гппс() 2. Что выведет следующий фрагмент и почему7 »> Х = 'Зраа' »> ааг гспс(): х= 'в1!' »> Гппс() »> рг1п1 Х 3. Что выведет следующий фрагмент и почему7 »> Х = 'Зраа' »> саг гппс(); Х = 'И1' рг1п1 Х »> гппс() »> рг1пг Х 4.

Что выведет следующий фрагмент на этот раз и почему7 »> Х = 'Зраа' »> саг гппс(): Р1саа1 Х Х = 'Й1' »> гипс() >» рг1п1 Х Глава 1б. Области видимости и аргументы 4З8 Что можно сказать об этом фрагменте — что он выведет и почему? »> Х = 'брав' »> бег тепе(): Х = 'В1' бег пеатеб(): рг1пт Х пеетеб() »> гипс() »> Х И в последний раз: что выведет следующий фрагмент и почему? »> бег гипс(а, Ь, с=а, б=4); рг1пт а, Ь, с, б »> тппс(1, *(б,б)) Назовите три-четыре способа в языке Ру()топ сохранять информа- цию о состоянии в функциях.

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

Инструкция ргтпт находит неизмененную переменную в глобальной области видимости. Будет выведена последовательность символов '))1' в одной строке и 'брав' — в другой, потому что внутри функции инструкция рг(пт найдет локальную переменную, а за ее пределами — глобальную.

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

Здесь будет выведено "1 5 б 4": 1 соответствует аргументу в первой позиции, 5 и б соответствуют аргументам Ь и с в соответствии с фор- Закрепление пройденного мой *лазе (значение 6 переопределяет значение по умолчанию аргумента с) и 0 получит значение по умолчанию 4, потому что четвертый аргумент в вызове функции отсутствует. 7.

Так как значения локальных переменных исчезают, когда функция возвращает управление, то информацию о состоянии в языке Руоггоп можно сохранять в глобальных переменных, для вложенных функций — в области видимости объемлющих функций, а также посредством аргументов со значениями по умолчанию. Альтернативный способ заключается в использовании классов и приемов ООП, который обеспечивает лучшую поддержку возможности сохранения информации о состоянии, чем любой из трех предыдущих приемов, потому что этот способ делает сохранение явным, позволяя выполнять присваивание значений атрибутам.

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

Кроме того, функции могут выполнять обмен информацией через такие системные устройства, как файлы и сокеты, но это уже выходит за рамки данной главы. Расширенные возможности функций В этой главе будут представлены дополнительные расширенные возможности, имеющие отношение к функциям: 1ааЬЬа-выражения, средства функционального программирования, такие как функция пар и генераторы списков, функции-генераторы и выражения-генераторы и многие другие. Отчасти искусство использования функций лежит в области интерфейсов между ними, поэтому здесь мы также исследуем некоторые общие принципы проектирования функций. Так как это последняя глава в четвертой части, ее завершает раздел с описанием типичных ошибок и упражнения, которые помогут вам приступить к использованию отраженных здесь идей. Анонимные функции: 1агпЬда Вы уже знаете, как писать свои собственные обычные функции на языке Ру$Ьоп.

В следующих разделах будет описано несколько более сложных концепций, имеющих отношение к функциям. Большинство из них не являются обязательными, но при грамотном использовании они могут упростить задачи программирования. Помимо инструкции Сег в языке РуФоп имеется возможность создавать объекты функций в форме выражений. Из-за сходства с аналогичной возможностью в языке Б1ВР она получила название 1ааЬСз.' Подобно инструкции Ье1 это выражение создает функцию, которая будет вызываться позднее, но в отличие от инструкции Се1, выражение возвращает Название «1ашЬйа» отпугивает многих программистов, хотя в нем нет ничего страшного.

Это название происходит из языка программирования 1.18Р, в котором это название было заимствовано из лямбда-исчисления— разновидности символической логики. Однако в языке Русйоп это просто ключевое елово, которое вводит выражение синтаксически. 441 Анонимные функции: )ап>Ьйа функцию, а не связывает ее с именем. Именно поэтому 1ааосз-выражения иногда называют анонимными (т. е. безымянными) функциями. На практике они часто используются как способ получить встроенную функцию или отложить выполнение фрагмента программного кода. !атЫа-выражения В общем виде 1зеЬЬз — это ключевое слово, за которым следуют один или более аргументов (точно так же, как список аргументов в круглых скобках в заголовке инструкции Ое1), и далее, вслед за двоеточием, находится выражение: 1авьеа агдиыепг), агдыыепт2, . агдыыепгд еырахеные, использующее аргументы В качестве результата 1ззодз-выражения возвращают точно такие же объекты функций, которые создаются инструкцией Ое1, но здесь есть несколько различий, которые делают 1ззосз-выражения удобными в некоторых специализированных случаях: ° 1зяЬ()а — зто выражение, а не инструкция.

По этой причине ключевое слово 1ззооа может появляться там, где синтаксис языка Ру1Ьоп не позволяет использовать инструкцию Ье1, например внутри литералов или в вызовах функций. Кроме того„1апЬОз-выражение возвращает значение (новую функцию), которое при желании можно присвоить переменной, в противовес инструкции Ое1, которая всегда связывает функцию с именем в заголовке, а не возвращает ее в виде результата. ° Тело 1ааЬОа — это не блок инструкций, а выражение.

Тело 1зеодз-выражения сродни тому, что вы помещаете в инструкцию ге(о гп внутри определения Ое(, — вы просто вводите результат в виде выражения вместо его явного возврата. Вследствие этого ограничения 1аэЬОа-выражения менее универсальны, чем инструкция ое1, — в теле 1аэЬоз-выражения может быть реализована только логика, не использующая такие инструкции, как 11. Такая реализация предусмотрена заранее — она ограничивает возможность создания большого числа уровней вложенности программ; 1ааооз-выражения предназначены для создания простых функций, а инструкции Ое1— для решения более сложных задач.

Если отвлечься от этих различий, Ье1 и 1ззЬоз выполняют одну и ту же работу. Например, мы уже видели, как создаются функции с помощью инструкции ое1: »> зе1 1епс(х, у, з): гешгп х + у + з »> гппс(2, Э, 4) 9 Но того же эффекта можно достигнуть с помощью 1заЬОз-выражения, явно присвоив результат имени, которое позднее будет использоваться для вызова функции: 442 Глава 17. Расширенные возможности функций »> Г = 1авЬИа х, у, >и х + у + а »> г(2, 3, 4) 9 Здесь имени г присваивается объект функции, созданный 1зюсба-выра- жением, — инструкция бе( работает точно так же, но присваивание вы- полняет автоматически. В 1авЬба-выражениях точно так же можно использовать аргументы со значениями по умолчанию: »> х = (1аеЬба а= Гее", Ь="Г1е", с="Гое": в «Ь + с) »> х(Геев") '»геегтегое' Для 1азсбз-выражений используются те же самые правила поиска переменных в областях видимости, что и для вложенных инструкций бег.

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

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

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

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