-
Title:
02-11 Использование процедур
-
Description:
-
К сожалению, у нас пока нет особых поводов для радости.
-
Себастьян говорит, что пройдет еще несколько лет, прежде чем у меня появится
-
свой собственный беспилотный автомобиль, но главная проблема в том,
-
что мы еще не поговорили о том, как использовать процедуры.
-
Мы всего лишь научились создавать их; пока мы не сможем их использовать,
-
у нас не будет веской причины для радости.
-
Мы вскоре научимся ими пользоваться и снова сможем широченно улыбаться.
-
А сейчас мы собственно и узнаем, как использовать процедуру.
-
Для этого нам понадобится <имя процедуры>, за которым следует
-
открывающая скобка и список <входных данных>.
-
В принципе их может быть сколько угодно, но их количество должно совпадать с
-
тем, что ожидает процедура.
-
Эти входные данные иногда называются «операндами».
-
А иногда – «аргументами».
-
Мы не будем спорить, что правильнее.
-
Мы просто будем называть их входными данными.
-
Вообще-то вы уже использовали похожую запись.
-
Еще в разделе 1 вы узнали, как использовать метод find() строковых переменных.
-
В find() передаются один или два входа.
-
Первый – это строка.
-
Строка, которую вы ищете – это первый параметр,
-
а необязательный второй – это целое число, позиция, с которой нужно начать
-
поиск данной строки.
-
В лекциях раздела 1 мы нашли множество применений методу find(), а вы закрепили эти знания,
-
выполняя домашнюю работу.
-
find() слегка отличается от процедур, которые вы определяете самостоятельно.
-
Во-первых, он встроен в язык.
-
Во-вторых, помимо уже упомянутых, у нас есть
-
еще один вход – вот этот.
-
У нас есть строка, в которой мы осуществляем поиск – к примеру,
-
переменная page – которая по сути является просто еще одним входом.
-
Позже мы поговорим о том, чем отличается такая запись, но в целом она
-
очень похожа на вызов процедуры, у которой один параметр находится здесь,
-
а остальные два – вот здесь.
-
Есть и отличия, но в этом разделе мы не будем на них останавливаться,
-
однако в дальнейшем вы узнаете, что на самом деле происходит при вызове метода.
-
У процедур, которые вы объявляете самостоятельно, нет
-
объекта, от имени которого они вызываются.
-
Есть только сама процедура и ее аргументы, или операнды, или входы –
-
как вам больше нравится – которые передаются в нее.
-
Посмотрим, как это работает, на примере простой процедуры.
-
Я определю процедуру rest_of_string(), и мы снабдим ее
-
параметром s; это значит, что у нее один вход и мы будем обращаться к
-
его значению через имя s.
-
Мы заставим ее возвращать все символы строки от первой [не нулевой!] позиции до ее конца.
-
Для этого мы будем использовать оператор индексации строк – return s[1:].
-
Это даст нам ту же строку без первой буквы, то есть все символы
-
от позиции 1 до конца строки.
-
Вот их мы и вернем.
-
Итак, на выходе rest_of_string() будет новая строка, начинающаяся
-
со второй буквы входной строки.
-
Вот пример использования этой процедуры.
-
Мы можем вызвать ее напрямую.
-
Мы можем написать print rest_of_string.
-
Это наша процедура.
-
Теперь нужно поставить открывающую скобку и передать в нее входное значение.
-
У rest_of_string() один параметр, так что нам понадобится передать в нее
-
одно значение, и оно должно быть строкой.
-
Мы передадим в процедуру строку 'audacity'.
-
Когда мы вызываем процедуру, контроль переходит
-
к телу процедуры.
-
Мы можем представить, что сейчас делает интерпретатор.
-
Вместо выполнения кода, интерпретатор сделает переход.
-
Когда мы вызовем процедуру, он перейдет к выполнению кода внутри нее.
-
Он присвоит параметрам поданные на вход значения.
-
Мы можем представить это как операцию присваивания, которая присваивает s
-
переданное в процедуру входное значение.
-
Теперь нам нужно выполнить тело процедуры.
-
В данном случае оно состоит из одной команды – вот этой команды return.
-
Нам нужно вычислить это значение, s[1:].
-
Оно будет равно строке 'udacity'.
-
Теперь перехойдем к команде return.
-
return означает, что мы переходим обратно.
-
Мы возвращаемся к месту вызова процедуры, но уже
-
с его результатом.
-
Когда мы переходим обратно, значение вызова становится равным значению,
-
которое мы вернули.
-
В данном случае это строка 'udacity'.
-
Итак, у нас пока нет собственной машины-беспилотника,
-
но теперь вы умеете определять и использовать процедуры.
-
Это очень мощная концепция.
-
Все, чем мы будем заниматься в рамках этого курса, как и деятельность
-
практически любого компьютерного программиста сводится к определению
-
процедур и их использованию.
-
А теперь у нас должна появиться широкая улыбка.
-
Мы можем думать о процедурах как о коде, преобразующем входные данные в выходные.
-
Мы также можем думать о людях как о существах, занимающихся тем же самым.
-
У нас есть входные значения, поступающие через глаза, через
-
рот – наверное, даже через нос.
-
Я не буду пытаться изобразить выходные данные человека-процедуры, но раз уж
-
процедуры играют настолько важную роль, мы посвятим им несколько
-
следующих заданий, чтобы убедиться, что вы хорошо их понимаете.