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

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

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

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

Глава 15. Основы функций гетв ге передает объект результата вызывающей программе. Когда функция вызывается, вызывающая программа приостанавливает свою работу, пока функция не завершит работу и не вернет управление. Функции, вычисляющие какое-либо значение, возвращают его с помощью инструкции гешга — возвращаемое значение становится результатом обращения к функции. Функции, известные как генераторы, для передачи возвращаемого значения могут также использовать инструкцию уае1О и сохранять свое состояние так, чтобы работа функции могла быть возобновлена позднее, — это еще одна из сложных тем, которые будут рассматриваться позже.

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

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

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

Если что-то из сказанного выше вам показалось непонятным, не волнуйтесь — в этой части книги мы исследуем все эти концепции на примерах программного кода. А теперь начнем изучение некоторых из этих идей и рассмотрим несколько примеров. 389 Создание функций Инструкция деФ Инструкция Сег создает объект функции и связывает его с именем. В общем виде инструкция имеет следующий формат: Ое( <паве>(агд1, агд2.... агдз): <а(а(еаепга> Как и все составные инструкции в языке Ру(Ьоп, инструкция сег состоит из строки заголовка и следующего за ней блока инструкций, обычно с отступами (или простая инструкция вслед за двоеточием).

Блок инструкций образует тело функции, т. е. программный код, который выполняется интерпретатором всякий раз, когда производится вызов функции. В строке заголовка инструкции оег определяются имя функции, с которым будет связан объект функции, и список из нуля или более аргументов (иногда их называют параметрами) в круглых скобках.

Имена аргументов в строке заголовка будут связаны с объектами, передаваемыми в функцию, в точке вызова. Тело функции часто содержит инструкцию ге(цгп: Ое( <паза>(агд1, агд2,... агди): ге(пгп <на1пе> Инструкция гегогп может располагаться в любом месте в теле функции — она завершает работу функции и передает результат вызывающей программе. Инструкция гегпгп содержит объектное выражение, которое дает результат функции. Инструкция гегцгп является необязательной — если она отсутствует, работа функции завершается, когда поток управления достигает конца тела функции.

С технической точки зрения, функция без инструкции гегзгп автоматически возвращает объект йопе, однако это значение обычно просто игнорируется. Функции могут также содержать инструкции у(е!С, которые используются для воспроизведения серии значений с течением времени, однако их рассмотрение мы отложим до главы 17, где обсуждаются расширенные темы, касающиеся функций. Инструкции деФ исполняются во время выполнения Инструкция Вег в языке Ру(Ьоп — это настоящая исполняемая инструкция: когда она исполняется, она создает новый объект функции и присваивает этот объект имени. (Не забывайте, все, что имеется в языке Руь)>оп, относится ко времени выполнения, здесь нет понятия времени компиляции.) Будучи инструкцией, Оег может появляться везде, где могут появляться инструкции, — даже внутри других инструкций. Например, даже при том, что инструкции сег обычно исполняются, когда выполняется импорт вмещающего их модуля, допускается вкладывать 390 Глава)5.

Основы функций определения функций внутрь инструкций (Г, что позволяет произво- дить выбор между альтернативами: тт тевт: Ьет Гипс(). № Определяет функцию таким способом е)зе Ьет гипс() № ипи такии способом гипс() № Вызов выбранное версии Чтобы понять этот фрагмент программного кода, обратите внимание, что инструкция Ье( напоминает инструкцию присваивания =: она просто выполняет присваивание во время выполнения.

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

Важен только объ- ект, на который ссылается имя: № Связывание обьектв функции с ииенеи № Вызов функции отпегпаюе = типо отпегпаме() В этом фрагменте функция была связана с другим именем и вызвана уже с использованием нового имени. Как и все остальное в языке Ру- й)топ, функции — это обычные объекты; они явно записываются в па- мять во время выполнения программы.

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

Как видите, функции имеют две стороны: определение (инструкция Ьег, которая создает функцию) и вызов (выражение, которое предписывает интерпретатору выполнить тело функции). 391 Первый пример: определения и вызовы »> бег с(вез(х, у): № создать еумкцию и связать ее с имеиеи гесцгп х * у № Тело, выполмлемое при вызове буикции Когда интерпретатор достигает эту инструкцию Ое( и выполняет ее, он создает новый объект функции, в который упаковывает программный код функции и связывает объект с именем (свез.

Как правило, такие инструкции размещаются в файлах модулей и выполняются во время импортирования модулей, однако такую небольшую функцию можно определить и в интерактивной оболочке. Вызов После выполнения инструкции бе( вы сможете вызывать функцию в своей программе„добавляя круглые скобки после ее имени. В круг- лых скобках можно указать один или более аргументов, значения ко- торых будут присвоены именам, указанным в заголовке функции: № Аргументы в круглык скобках »> Савве(2, 4) б Данное выражение передает функции Сзпеб два аргумента.

Как уже упоминалось ранее, передача аргументов осуществляется за счет выполнения операции присваивания, таким образом, имени х в заголовке функции присваивается значение 2, а имени у — значение 4,после чего запускается тело функции. В данном случае тело функции составляет единственная инструкция тес ц гп, которая отправляет обратно результат выражения. Возвращаемый объект был выведен интерактивной оболочкой автоматически (как и в большинстве языков, 2 * 4 в языке РуСЬоп равно 8), однако, если бы результат потребовался бы нам позднее, мы могли бы присвоить его переменной.

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

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

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

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