Скачать презентацию Программирование на Python е Введение в информатику Глава 6 Скачать презентацию Программирование на Python е Введение в информатику Глава 6

Глава 6 Определение функций.ppt

  • Количество слайдов: 79

Программирование на Python’е: Введение в информатику Глава 6 Определение функций Python Programming, 2/e 1 Программирование на Python’е: Введение в информатику Глава 6 Определение функций Python Programming, 2/e 1

Задачи n n n Понять почему программисты подразделяют программы на множества взаимодействующих функций. Уметь Задачи n n n Понять почему программисты подразделяют программы на множества взаимодействующих функций. Уметь определять новые функции на Python’е. Узнать подробности того, как вызываются функции и передаются параметры в Python’е. Python Programming, 2/e 2

Задачи (продолжение) n Научиться писать программы, которые используют функции, чтобы уменьшить дублирования кода и Задачи (продолжение) n Научиться писать программы, которые используют функции, чтобы уменьшить дублирования кода и увеличить модульность программ. Python Programming, 2/e 3

Функции функций n До сих пор нам встретились четыре различных типа функций: n n Функции функций n До сих пор нам встретились четыре различных типа функций: n n наши программы содержат единственную функцию main(); встроенные в Python функции (abs); функции из стандартных библиотек (math. sqrt); функции из графического модуля graphics. py (p. get. X()) Python Programming, 2/e 4

Функции функций n Наличие идентичного кода в 2 -х и более местах свидетельствует об Функции функций n Наличие идентичного кода в 2 -х и более местах свидетельствует об упущениях при программировании: n n n претензия 1: написание одинакового кода в двух или более местах; претензия 2: одинаковый код должен поддерживаться в разных местах. Чтобы уменьшить дублирование кода, упростить сопровождение программ и сделать программы понятнее, используют функции. Python Programming, 2/e 5

О функциях просто n n Функция похожа на подпрограмму, небольшую программу внутри большой программы. О функциях просто n n Функция похожа на подпрограмму, небольшую программу внутри большой программы. Основная идея – мы пишем последовательность операторов и даём этой последовательности имя. Мы можем после этого выполнить эту последовательность операторов в любое время, обратившись к ней по имени. Python Programming, 2/e 6

О функциях просто n n Часть программы, которая порождает функцию, называется определением функции. Когда О функциях просто n n Часть программы, которая порождает функцию, называется определением функции. Когда функция используется в программе, то говорят, что функция вызывается или активизируется (запускается). Python Programming, 2/e 7

О функциях просто n Лирика “Happy Birthday” def main(): print( О функциях просто n Лирика “Happy Birthday” def main(): print("Happy n birthday to you!" ) birthday, dear Fedya. . . ") birthday to you!") Даёт нам следующее … >>> main() Happy birthday to you! Happy birthday, dear Fedya. . . Happy birthday to you! Python Programming, 2/e 8

О функциях просто n В программе есть повторяющийся код! (print( О функциях просто n В программе есть повторяющийся код! (print("Happy n birthday to you!")) Можно определить функцию, чтобы печатать эту строку: def happy(): print("Happy birthday to you!") n С этой функцией мы можем переписать программу по новому. Python Programming, 2/e 9

О функциях просто n Новая программа – def sing. Fred(): happy() print( О функциях просто n Новая программа – def sing. Fred(): happy() print("Happy birthday, dear Fedya. . . ") happy() n Выдаёт нам песенку – >>> sing. Fred() Happy birthday to you! Happy birthday, dear Fedya. . . Happy birthday to you! Python Programming, 2/e 10

О функциях просто n n Создание этой функции сэкономило нам время печати. А что О функциях просто n n Создание этой функции сэкономило нам время печати. А что если наступил день рождения Люси? Мы можем написать новую функцию sing. Lucy. def sing. Lucy(): happy() print("Happy birthday, dear Lyusya. . . ") happy() Python Programming, 2/e 11

О функциях просто n Можно было бы написать программу, которая поёт и для Феди О функциях просто n Можно было бы написать программу, которая поёт и для Феди и для Люси. def main(): sing. Fred() print() sing. Lucy() n Получаем следующий вывод: >>> main() Happy birthday to you! Happy birthday, dear Fedya. . Happy birthday to you! Happy birthday to you! birthday, dear Lyusya. . . birthday to you! Python Programming, 2/e 12

О функциях просто n n Всё это великолепно, но… всё еще много повторений. Единственная О функциях просто n n Всё это великолепно, но… всё еще много повторений. Единственная разница между sing. Fred и sing. Lucy имя в третьем операторе print. n Две программы можно свести к одной с помощью параметра. Python Programming, 2/e 13

О функциях просто n Универсальная функция sing def sing(person): happy() print( О функциях просто n Универсальная функция sing def sing(person): happy() print("Happy birthday, dear", person + ". “) happy() n Эта функция использует в качестве параметра имя поздравляемого. Параметр это переменная, которая инициализируется перед вызовом функции. Python Programming, 2/e 14

О функциях просто n Наш новый вывод – >>> sing( О функциях просто n Наш новый вывод – >>> sing("Fedya") Happy birthday to you! Happy birthday, dear Fedya. Happy birthday to you! n Можно составить новую основную программу. Python Programming, 2/e 15

О функциях просто n Наша новая основная программа: def main(): sing( О функциях просто n Наша новая основная программа: def main(): sing("Fedya") print() sing("Lyusya") n Даёт следующий вывод: >>> main() Happy birthday to you! Happy birthday, dear Fedya. Happy birthday to you! Happy birthday to you! birthday, dear Lyusya. birthday to you! Python Programming, 2/e 16

Программа «Будущее значение» с функциями n В программе «Будущее значение» мы видим одинаковый код Программа «Будущее значение» с функциями n В программе «Будущее значение» мы видим одинаковый код дважды : # Чертим столбик для первоначального вклада bar = Rectangle(Point(0, 0), Point(1, principal)) bar. set. Fill("green") bar. set. Width(2) bar. draw(win) bar = Rectangle(Point(year, 0), Point(year+1, principal)) bar. set. Fill("green") bar. set. Width(2) bar. draw(win) Python Programming, 2/e 17

Программа «Будущее значение» с функциями n Чтобы правильно начертить столбики, нам нужны данные трёх Программа «Будущее значение» с функциями n Чтобы правильно начертить столбики, нам нужны данные трёх видов: n n год, для которого рисуем столбик, каким высоким должен быть столбик, название окна, в котором чертим столбик. Эти три значения нужно передать в качестве параметров функции. Python Programming, 2/e 18

Программа «Будущее значение» с функциями n Результирующая функция выглядит следующим образом: def draw. Bar(window, Программа «Будущее значение» с функциями n Результирующая функция выглядит следующим образом: def draw. Bar(window, year, height): # Чертим столбик в window, начиная с year с заданной высотой height bar = Rectangle(Point(year, 0), Point(year+1, height)) bar. set. Fill("green") bar. set. Width(2) bar. draw(window) n Чтобы воспользоваться этой функцией, мы задаём три значения. Если win объект класса Graphwin, то мы можем начертить столбик для year = 0 и principal= $2000, используя вызов: draw. Bar(win, 0, 2000) Python Programming, 2/e 19

Функции и параметры: подробности n n Понятно зачем передавать в функцию draw. Bar год Функции и параметры: подробности n n Понятно зачем передавать в функцию draw. Bar год и величину вклада, но зачем передавать переменную win? Сфера действия переменной это такие области в программе, в которых к данной переменной можно обратиться по её имени. Python Programming, 2/e 20

Функции и параметры: подробности n n Каждая функция сама является небольшой подпрограммой. Переменные, используемые Функции и параметры: подробности n n Каждая функция сама является небольшой подпрограммой. Переменные, используемые внутри функции, называются локальными для функции, даже если в других функциях встречаются переменные с теми же именами. Единственным способом для функции увидеть переменную из другой функции является передача этой переменной в функцию в качестве параметра. Python Programming, 2/e 21

Функции и параметры: подробности n n Так как объект класса Graph. Win в переменной Функции и параметры: подробности n n Так как объект класса Graph. Win в переменной win создан в программе main, то он не является непосредственно доступным в функции draw. Bar. Параметру window в функции draw. Bar назначается значение переменной win из программы main когда вызывается функция draw. Bar. Python Programming, 2/e 22

Функции и параметры: подробности n n n Определение функции выглядит следующим образом: def <имя>(<формальные Функции и параметры: подробности n n n Определение функции выглядит следующим образом: def <имя>(<формальные параметры>): <тело функции> Имя функции должно быть идентификатором. Формальные параметры это возможно пустой список имён переменных. Python Programming, 2/e 23

Функции и параметры: подробности n Формальные параметры, как и все переменные, используемые в функциию Функции и параметры: подробности n Формальные параметры, как и все переменные, используемые в функциию доступны только в теле функции. Переменные с теми же именами в другом месте программы отличны от формальных параметров и переменных внутри тела функции. Python Programming, 2/e 24

Функции и параметры: подробности n n Функция вызывается при помощи указания имени и списка Функции и параметры: подробности n n Функция вызывается при помощи указания имени и списка фактических параметров или аргументов. <имя>(<фактические параметры>) Когда Python встречает вызов функции, он запускает 4 -х шаговый процесс. Python Programming, 2/e 25

Функции и параметры: подробности n n вызвавшая программа приостанавливает работу в точке вызова; формальные Функции и параметры: подробности n n вызвавшая программа приостанавливает работу в точке вызова; формальные параметры функции получают значения фактических параметров из вызова функции; выполняется тело функции; управление возвращается в точку, расположенную сразу после той, из которой была вызвана функция. Python Programming, 2/e 26

Функции и параметры: подробности n Давайте проследим сказанное на следующем примере: sing( Функции и параметры: подробности n Давайте проследим сказанное на следующем примере: sing("Федя") print() sing("Люся") n n Когда Python добирается до sing("Федя"), выполнение программы main временно приостанавливается. Python просматривает определение функции sing и видит, что имеется один формальный параметр, person. Python Programming, 2/e 27

Функции и параметры: подробности n Формальному параметру назначается значение фактического параметра. Это как если Функции и параметры: подробности n Формальному параметру назначается значение фактического параметра. Это как если бы был бы выполнен следующий оператор: person = "Федя" Python Programming, 2/e 28

Функции и параметры: подробности Заметим, что переменная person только что была инициализирована. Python Programming, Функции и параметры: подробности Заметим, что переменная person только что была инициализирована. Python Programming, 2/e 29

Функции и параметры: подробности n n В этой точке Python начинает исполнение тела функции Функции и параметры: подробности n n В этой точке Python начинает исполнение тела функции sing. Первый оператор снова является вызовом функции (happy). Что происходит дальше? Python приостанавливает выполнение функции sing и передаёт управление функции happy. Функция happy состоит из одного оперетора print, который выполняется и контроль возвращается назад в sing. Python Programming, 2/e 30

Функции и параметры: подробности n n Выполнение продолжается таким способом и мы еще дважды Функции и параметры: подробности n n Выполнение продолжается таким способом и мы еще дважды возвращаемся к функции happy. Когда Python достигает конца функции sing, управление передаётся назад в функцию main и продолжает тут же следующий вызов функции. Python Programming, 2/e 31

Функции и параметры: подробности n n n Заметьте, что переменная person в функции sing Функции и параметры: подробности n n n Заметьте, что переменная person в функции sing пропала! Память, занимаемая локальной переменной функции, возвращается назад после выхода из функции. Локальные переменные не сохраняют никакого значения от одного выполнения функции до другого. Python Programming, 2/e 32

Функции и параметры: подробности n n Следующий оператор это print(), который выдаёт пустую строку. Функции и параметры: подробности n n Следующий оператор это print(), который выдаёт пустую строку. Python встречается еще с одним вызовом функции sing, и управление передаётся функции sing с формальным параметром “Люся”. Python Programming, 2/e 33

Функции и параметры: подробности n Тело функции sing исполняется для параметра “Люся” с тремя Функции и параметры: подробности n Тело функции sing исполняется для параметра “Люся” с тремя вспомогательными переходами к функции happy и возвратами управления в main. Python Programming, 2/e 34

Функции и параметры: подробности Python Programming, 2/e 35 Функции и параметры: подробности Python Programming, 2/e 35

Функции и параметры: подробности Один аспект, который не рассмотрен в этом примере это число Функции и параметры: подробности Один аспект, который не рассмотрен в этом примере это число параметров >1. В этом случае формальные и фактические параметры сопоставляются, основываясь на позиции параметров, то есть первый фактический параметр присваивается первому формальному параметру, второй фактический параметр – второму формальному параметру и так далее. Python Programming, 2/e 36

Функции и параметры: подробности n n В качестве примера рассмотрим вызов функции draw. Bar: Функции и параметры: подробности n n В качестве примера рассмотрим вызов функции draw. Bar: draw. Bar(win, 0, principal) Когда управление передаётся функции draw. Bar, эти параметры сопоставляются формальным параметрам в заголовке функции: def draw. Bar(window, year, height): Python Programming, 2/e 37

Функции и параметры: подробности n Совокупный эффект таков, как если бы функции предшествовали три Функции и параметры: подробности n Совокупный эффект таков, как если бы функции предшествовали три оператора присваивания: window = win year = 0 height = principal Python Programming, 2/e 38

Получение результатов от функции n n n Передача параметров предоставляет механизм для инициализации переменных Получение результатов от функции n n n Передача параметров предоставляет механизм для инициализации переменных в функции. Параметры действуют как ввод в функцию. Мы можем вызывать функцию много раз и получать различные результаты, меняя её параметры. Python Programming, 2/e 39

Функции, которые возвращают значения n Мы уже видели многочисленные примеры функций, которые возвращают значения Функции, которые возвращают значения n Мы уже видели многочисленные примеры функций, которые возвращают значения вызвавшему. disc. Rt = math. sqrt(b*b – 4*a*c) n n Число (b*b – 4*a*c) является фактическим параметром в math. sqrt. Мы говорим sqrt возвращает квадратный корень его аргумента. Python Programming, 2/e 40

Функции, которые возвращают значения n Эта функция возвращает квадрат числа : def square(x): return Функции, которые возвращают значения n Эта функция возвращает квадрат числа : def square(x): return x*x n n Когда Python встречает оператор return, он выходит из функции и передаёт управление в точку, откуда функция была вызвана. В дополнение, значение(я) представленные в операторе return возвращаются вызвавшему как результат выражения. Python Programming, 2/e 41

Функции, которые возвращают значения n n >>> 9 >>> 16 >>> >>> 25 >>> Функции, которые возвращают значения n n >>> 9 >>> 16 >>> >>> 25 >>> 34 square(3) print(square(4)) x = 5 y = square(x) print(y) print(square(x) + square(3)) Python Programming, 2/e 42

Функции, которые возвращают значения n n Мы можем использовать функцию square, чтобы написать подпрограмму, Функции, которые возвращают значения n n Мы можем использовать функцию square, чтобы написать подпрограмму, вычисляющую расстояние между точками (x 1, y 1) и (x 2, y 2). def distance(p 1, p 2): dist = math. sqrt(square(p 2. get. X() - p 1. get. X()) + square(p 2. get. Y() - p 1. get. Y())) return dist Python Programming, 2/e 43

Функции, которые возвращают значения n n n Иногда функции нужно возвратить больше чем одно Функции, которые возвращают значения n n n Иногда функции нужно возвратить больше чем одно значение. Чтобы сделать это просто перечислите более чем одно выражение в операторе return. def sum. Diff(x, y): sum = x + y diff = x – y return sum, diff Python Programming, 2/e 44

Функции, которые возвращают значения n n n При вызове такой функции используйте одновременное присваивание. Функции, которые возвращают значения n n n При вызове такой функции используйте одновременное присваивание. num 1, num 2 = eval(input("Введите два числа (num 1, num 2) ")) s, d = sum. Diff(num 1, num 2) print("Сумма равна", s, "и разность равна", d) Как и ранее значения присваиваются на основе позиции, s получает первое возвращенное значение (сумма), а d получает второе (разность). Python Programming, 2/e 45

Функции, которые возвращают значения n n Одна “gotcha” (прикол) – все функции Python’а возвращают Функции, которые возвращают значения n n Одна “gotcha” (прикол) – все функции Python’а возвращают значение содержат они оператор return или нет. Функции без оператора return возвращают специальный объект, обозначаемый None. Стандартная проблема – написать возвращающую значение функцию без оператора return! Python Programming, 2/e 46

Функции, которые возвращают значения n Если ваша возвращающая значение функция выдаёт странное сообщение, проверьте Функции, которые возвращают значения n Если ваша возвращающая значение функция выдаёт странное сообщение, проверьте и убедитесь, что функция содержит оператор return! Python Programming, 2/e 47

Функции, которые изменяют параметры n n n Возвращаемые значения это основной способ послать данные Функции, которые изменяют параметры n n n Возвращаемые значения это основной способ послать данные из функции назад в программу. Иногда можно обмениваться данными с программой, изменяя параметры функции. Понимание когда и как это возможно требует овладения некоторых тонких подробностей того, как работает присваивание и связи между фактическими и формальными параметрами. Python Programming, 2/e 48

Функции, которые изменяют параметры n n Предположим, что вы пишете программу, которая обрабатывает банковские Функции, которые изменяют параметры n n Предположим, что вы пишете программу, которая обрабатывает банковские счета. Одной из функций, которая нам будет нужна, является функция, накапливающая проценты на счете. Давайте посмотрим первое приближение для такой функции. def add. Interest(balance, rate): new. Balance = balance * (1 + rate) balance = new. Balance Python Programming, 2/e 49

Функции, которые изменяют параметры n n Намерение присвоить значению счета новую величину, которая учитывает Функции, которые изменяют параметры n n Намерение присвоить значению счета новую величину, которая учитывает поступающие проценты. Давайте напишем тестирующую программу: def test(): amount = 1000 rate = 0. 05 add. Interest(amount, rate) print(amount) Python Programming, 2/e 50

Функции, которые изменяют параметры n n n Мы надеемся, что к вкладу добавятся 5% Функции, которые изменяют параметры n n n Мы надеемся, что к вкладу добавятся 5% и мы получим на выходе 1050. >>> test() 1000 Что неправильно? Ничего! Python Programming, 2/e 51

Функции, которые изменяют параметры n Первые две строки теста создают две локальные переменные amount Функции, которые изменяют параметры n Первые две строки теста создают две локальные переменные amount и rate, которым присваиваются начальные значения 1000 и 0. 05, соответственно. def add. Interest(balance, rate): new. Balance = balance * (1 + rate) balance = new. Balance def test(): amount = 1000 rate = 0. 05 add. Interest(amount, rate) print(amount) Python Programming, 2/e 52

Функции, которые изменяют параметры n n n Управление затем передаётся функции add. Interest. Формальным Функции, которые изменяют параметры n n n Управление затем передаётся функции add. Interest. Формальным параметрам balance и rate присваиваются значения реальных параметров amount и rate. Хотя rate встречается в обоих случаях, это разные переменные (из-за правил сферы действия). def add. Interest(balance, rate): new. Balance = balance * (1 + rate) balance = new. Balance def test(): amount = 1000 rate = 0. 05 add. Interest(amount, rate) print(amount) Python Programming, 2/e 53

Функции, которые изменяют параметры n Присваивание параметров причина того, что переменные balance и rate Функции, которые изменяют параметры n Присваивание параметров причина того, что переменные balance и rate в add. Interest ссылаются на def add. Interest(balance, rate): new. Balance = balance*(1 + rate) balance = new. Balance def test(): amount = 1000 rate = 0. 05 add. Interest(amount, rate) print(amount) значения действительных параметров! Python Programming, 2/e 54

Функции, которые изменяют параметры Python Programming, 2/e 55 Функции, которые изменяют параметры Python Programming, 2/e 55

Функции, которые изменяют параметры n n Выполнение первой строки из функции add. Interest создаёт Функции, которые изменяют параметры n n Выполнение первой строки из функции add. Interest создаёт новую переменную , new. Balance. Переменной balance присваивается значение new. Balance. def add. Interest(balance, rate): new. Balance = balance * (1 + rate) balance = new. Balance def test(): amount = 1000 rate = 0. 05 add. Interest(amount, rate) print(amount) Python Programming, 2/e 56

Функции, которые изменяют параметры n Переменная balance теперь ссылается на то же значение, что Функции, которые изменяют параметры n Переменная balance теперь ссылается на то же значение, что и new. Balance, но это не оказывает никакого действия на amount в функции test. def add. Interest(balance, rate): new. Balance = balance * (1 + rate) balance = new. Balance def test(): amount = 1000 rate = 0. 05 add. Interest(amount, rate) print (amount) Python Programming, 2/e 57

Функции, которые изменяют параметры Python Programming, 2/e 58 Функции, которые изменяют параметры Python Programming, 2/e 58

Функции, которые изменяют параметры n n Выполнение функции add. Interest завершилось и управление передаётся Функции, которые изменяют параметры n n Выполнение функции add. Interest завершилось и управление передаётся функции test. Локальные переменные, включая параметры, в функции add. Interest исчезают, но amount и rate в функции test всё еще указывают на первоначальные значения! def add. Interest(balance, rate): new. Balance = balance * (1 + rate) balance = new. Balance def test(): amount = 1000 rate = 0. 05 add. Interest(amount, rate) print(amount) Python Programming, 2/e 59

Функции, которые изменяют параметры n n Суммируем: формальные параметры функции получают значения фактических параметров. Функции, которые изменяют параметры n n Суммируем: формальные параметры функции получают значения фактических параметров. У функции нет доступа к переменным, которые содержат фактические параметры. Python передаёт параметры по значению. Python Programming, 2/e 60

Функции, которые изменяют параметры n n Некоторые языки программирования (C++, Ada, и многие др. Функции, которые изменяют параметры n n Некоторые языки программирования (C++, Ada, и многие др. ) разрешают сами переменные посылать как параметры функции. Этот механизм передаёт параметры по ссылке. Когда новое значение присваивается формальному параметру, значение переменной в вызывающей программе действительно изменяется. Python Programming, 2/e 61

Функции, которые изменяют параметры n Так как у Python’а нет такой возможности, то одной Функции, которые изменяют параметры n Так как у Python’а нет такой возможности, то одной из альтернатив было бы изменение функции add. Interest, чтобы она возвращала переменную new. Balance. Python Programming, 2/e 62

Функции, которые изменяют параметры def add. Interest(balance, rate): new. Balance = balance * (1 Функции, которые изменяют параметры def add. Interest(balance, rate): new. Balance = balance * (1 + rate) return new. Balance def test(): amount = 1000 rate = 0. 05 amount = add. Interest(amount, rate) print(amount) test() Python Programming, 2/e 63

Функции, которые изменяют параметры n n Вместо работы с одним счетом, пусть мы пишем Функции, которые изменяют параметры n n Вместо работы с одним счетом, пусть мы пишем программу для банка, которая работает с многими счетами. Мы могли бы хранить балансы счетов в списке, а затем добавлять увеличивающиеся проценты к каждому балансу счета. Мы можем актуализировать первый баланс в счете с помощью кода: balances[0] = balances[0] * (1 + rate) Python Programming, 2/e 64

Функции, которые изменяют параметры n n Этот код говорит, “умножь значение на на 0 Функции, которые изменяют параметры n n Этот код говорит, “умножь значение на на 0 -ом месте списка на (1 + rate) и помести результат назад на 0 -ое место списка. ” Более общим способом сделать это был бы цикл по позициям с номерами 0, 1, …, length – 1. Python Programming, 2/e 65

Функции, которые изменяют параметры # addinterest 3. py # Иллюстрирует изменение изменяемого параметра (списка). Функции, которые изменяют параметры # addinterest 3. py # Иллюстрирует изменение изменяемого параметра (списка). def add. Interest(balances, rate): for i in range(len(balances)): balances[i] = balances[i] * (1+rate) def test(): amounts = [1000, 2200, 800, 360] rate = 0. 05 add. Interest(amounts, 0. 05) print(amounts) test() Python Programming, 2/e 66

Функции, которые изменяют параметры n Запомните, наш первоначальный код содержал значения: [1000, 2200, 800, Функции, которые изменяют параметры n Запомните, наш первоначальный код содержал значения: [1000, 2200, 800, 360] n Программа возвращает: [1050. 0, 2310. 0, 840. 0, 378. 0] n Что случилось? Python передаёт параметры по значению, но похоже на то, что значение amounts изменилось! Python Programming, 2/e 67

Функции, которые изменяют параметры n n Первые две строки test создают переменные amounts и Функции, которые изменяют параметры n n Первые две строки test создают переменные amounts и rate. Значением переменной amounts является список объектов, который содержит 4 целых числа. def add. Interest(balances, rate): for i in range(len(balances)): balances[i] = balances[i] * (1+rate) def test(): amounts = [1000, 2200, 800, 360] rate = 0. 05 add. Interest(amounts, 0. 05) print(amounts) Python Programming, 2/e 68

Функции, которые изменяют параметры Python Programming, 2/e 69 Функции, которые изменяют параметры Python Programming, 2/e 69

Функции, которые изменяют параметры n Далее, выполняется add. Interest. Цикл идёт по всем значениям Функции, которые изменяют параметры n Далее, выполняется add. Interest. Цикл идёт по всем значениям из области 0, 1, …, length – 1 и актуализирует значение в переменной balances. def add. Interest(balances, rate): for i in range(len(balances)): balances[i] = balances[i] * (1+rate) def test(): amounts = [1000, 2200, 800, 360] rate = 0. 05 add. Interest(amounts, 0. 05) print(amounts) Python Programming, 2/e 70

Функции, которые изменяют параметры Python Programming, 2/e 71 Функции, которые изменяют параметры Python Programming, 2/e 71

Функции, которые изменяют параметры n n В диаграмме старые значения остались такими же, чтобы Функции, которые изменяют параметры n n В диаграмме старые значения остались такими же, чтобы подчеркнуть что числа в ящиках не изменились, но новые значения были созданы и присвоены списку. Старые значения будут убраны в процессе сбора мусора. def add. Interest(balances, rate): for i in range(len(balances)): balances[i] = balances[i] * (1+rate) def test(): amounts = [1000, 2200, 800, 360] rate = 0. 05 add. Interest(amounts, 0. 05) print amounts Python Programming, 2/e 72

Функции, которые изменяют параметры n n Когда функция add. Interest завершается, список, содержащийся в Функции, которые изменяют параметры n n Когда функция add. Interest завершается, список, содержащийся в переменной amounts, содержит новые значения. Переменная amounts не была изменена (это всё еще список), но состояние этого списка было изменено, и это изменение видно вызывающей программе. Python Programming, 2/e 73

Функции, которые изменяют параметры n n Параметры всегда передаются по значению. Однако, если значение Функции, которые изменяют параметры n n Параметры всегда передаются по значению. Однако, если значение переменной изменяемый объект (как список графических объектов), то изменения состояния объектов будут видны вызывающей программе. Эта ситуация другой пример темы совмещений (алиасов), обсуждённой в главе 4! Python Programming, 2/e 74

Функции и структура программ n n n До сих пор функции использовались как механизм Функции и структура программ n n n До сих пор функции использовались как механизм для уменьшения дублирования кода. Другой причиной использовать функции сделать программу более модульной. По мере того как алгоритмы, которые вы создаёте, становятся всё более сложными, становится всё более трудно понимать программы. Python Programming, 2/e 75

Функции и структура программ n n Одним из способов преодолеть эту сложность является разбиение Функции и структура программ n n Одним из способов преодолеть эту сложность является разбиение алгоритма на меньшие подпрограммы, каждая из которых имеет смысл сама по себе. Эта тема будет обсуждена более подробно в главе 9. Python Programming, 2/e 76

Функции и структура программ def main(): # Введение print( Функции и структура программ def main(): # Введение print("Эта программа чертит диаграмму роста 10 -летнего вклада. ") # Получаем вклад и годовые проценты principal = eval(input(" Введите первоначальный вклад : ")) apr = eval(input("Введите годовые проценты: ")) # Создаём окно с подписями слева win = Graph. Win("Диаграмма роста вклада", 320, 240) win. set. Background("white") win. set. Coords(-1. 75, -200, 11. 5, 10400) Text(Point(-1, 0), ' 0. 0 K'). draw(win) Text(Point(-1, 2500), ' 2. 5 K'). draw(win ) Text(Point(-1, 5000), ' 5. 0 K'). draw(win) Text(Point(-1, 7500), ' 7. 5 k'). draw(win) Text(Point(-1, 10000), '10. 0 K'). draw(win) # Чертим столбик первоначального вклада draw. Bar(win, 0, principal) # Чертим столбик для каждого последующего года for year in range(1, 11): principal = principal * (1 + apr) draw. Bar(win, year, principal) input("Нажмите , чтобы выйти. ") win. close() Python Programming, 2/e 77

Функции и структура программ Мы можем сделать эту программу более понятной, если сдвинем средние Функции и структура программ Мы можем сделать эту программу более понятной, если сдвинем средние 8 строк, которые создают окно, в котором чертится диаграмма, в функцию, возвращающую значение. Python Programming, 2/e 78

Функции и структура программ def create. Labeled. Window(): window = Graph. Win( Функции и структура программ def create. Labeled. Window(): window = Graph. Win("Диаграмма роста вклада", 320, 240) window. set. Background("white") window. set. Coords(-1. 75, -200, 11. 5, 10400) Text(Point(-1, 0), ' 0. 0 K'). draw(window) Text(Point(-1, 2500), ' 2. 5 K'). draw(window) Text(Point(-1, 5000), ' 5. 0 K'). draw(window) Text(Point(-1, 7500), ' 7. 5 k'). draw(window) Text(Point(-1, 10000), '10. 0 K'). draw(window) return window def main(): print("Эта программа чертит диаграмму роста 10 -летнего вклада. ") principal = eval(input(" Введите начальное значение вклада : ")) apr = eval(input("Введите годовые процентыe: ")) win = create. Labeled. Window() draw. Bar(win, 0, principal) for year in range(1, 11): principal = principal * (1 + apr) draw. Bar(win, year, principal) input("Нажмите , чтобы выйти. ") win. close() Python Programming, 2/e 79