Главная » Просмотр файлов » Лекция 13. Подпрограммы. (часть 2)

Лекция 13. Подпрограммы. (часть 2) (1152915)

Файл №1152915 Лекция 13. Подпрограммы. (часть 2) (Воробьева И.А. «Информатика. Язык Питон» (2016))Лекция 13. Подпрограммы. (часть 2) (1152915)2019-09-06СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

1Воробьева И.А. «Информатика. Язык Питон»Подпрограммы. Взаимодействие подпрограмм (продолжение)Программирование с использованием подпрограмм. Типы подпрограмм.Формальные и фактические параметры. Способы передачи параметров.Параметры по умолчанию, списки параметров. Области видимостипеременных. Разработка сложных программ, содержащих подпрограммы.Использование имени подпрограммы в качестве параметра.8. ПОДПРОГРАММЫ. ВЗАИМОДЕЙСТВИЕ ПОДПРОГРАММ8.2.3.

Дополнительные сведения о параметрах в PythonЯзык Python предоставляет достаточно гибкий набор способовпередачи параметра с точки зрения синтаксиса, не изменяя основномуправилу передачи параметров. Напомним его.Действует следующее правило, неизменяемые переменныепередаются только по значению (параметр-значение), а изменяемые– по ссылке (параметр-переменная).!Это означает, что для написания рабочего кода, реализующегоалгоритмы, вполне достаточно знать информацию из п.п. 8.2.2. Гибкостьсинтаксической конструкции призвана давать удобство в написаниикода, а не увеличивать его функционал. Ближайший известный наманалог – это цикл for, который вполне может быть замещен однимтолько циклом while.

Не будем описывать все способы, которые есть вPython, но есть два, которые могут оказаться очень полезными.Важно. Все параметры, которые мы рассматриваем в разделе 8.2.относятся к так называемым позиционным параметрам. Этоозначает, что в каком порядке они перечислены при определениифункции, в таком же порядке должны записываться и при ее вызове.Другими словами, важна «позиция в списке параметров».!2Воробьева И.А. «Информатика. Язык Питон»Значения аргументов по умолчаниюНередко в решениях практических задач есть параметры, которыепринимают определенные значения, что называется «как правило».Например: стандартное время открытия и закрытия заведения (магазина,офиса, поликлиники и т.п.) – 8.00 - 19.00; время задержки, принятое в данном классе приборов – 10 с; максимальное время ожидания «действия пользователя» – 5 мин; начальное значение важной для алгоритма величины и т.д.В этом случае удобно какую-то часть параметров функции сделатьнеобязательными, это значит, что для них будут использоватьсянекоторые заданные значения по умолчанию, если пользователь неукажет собственных.Их можно указать, добавив к имени параметра в определениифункции оператор присваивания «=» с последующим значением.Примеры:def say(message, times = 1): def mesErr(err='', n=-1):print(message * times)if len(err) == 0:print('Неизвестная ошибка.')say('Привет!')elif n == -1:say('Привет! ', 5)print(err)else:Вывод:print('Ошибка '+err+' по адресу: ',hex(n))Привет!Привет! Привет! Привет!mesErr('деление на ноль', 0x5fd6)mesErr('Ошибка при открытии файла.')mesErr()mesErr(0x5fd6) # недопустимый вызов функцииВывод:Ошибка деление на ноль по адресу: 0x5fd6Ошибка при открытии файла.Неизвестная ошибка3Воробьева И.А.

«Информатика. Язык Питон»Важно. Параметры по умолчанию должны располагаться в концесписка обычных параметров. Так определить функцию нельзя:def func(a, b=5, c, d):….Подумайте, почему.!Переменное число параметровИногда бывает нужно определить функцию, способную приниматьлюбое число параметров. Этого можно достичь при помощи установки«звёздочки» (*) перед именем параметра.Когда мы объявляем параметр со звёздочкой (например, *), всепозиционные аргументы, начиная с этой позиции и до конца, будут собраны в кортеж под именем.Проще всего удобство переменного числа аргументов показать напримере (см. [1], c. 66). Здесь можно «просуммировать» любую последовательность простых типов с инициализацией, причем допустим вызов функции вообще без аргументов.def total(init=5, *numbers):count = initfor i in numbers: # здесь i инициализируется самой конструкцией for..incount += ireturn countprint(total(3,4,5))print(total("3","4","5"))print(total(-37.5, 4786, -15, 0.456, -25.03))print(total((3+1j),(4-3j),(-1j)))print(total(10))print(total())4Воробьева И.А.

«Информатика. Язык Питон»Вывод:123454708.926(7-3j)105Важно. Параметры в списке при определении функции размещать вследующем порядке: 1) параметры со значениями без умолчания; 2)параметры по умолчанию; 3) параметр со звездочкой.Подумайте, почему.!.8.3. Подпрограммы. Области видимости переменныхНапоминание.

Все имена, представленные в разделе описаний основнойпрограммы, называются глобальными. Они «действуют» как в разделеоператоров основной программы, так и в любой подпрограмме. Имена,представленные в разделе описаний подпрограммы, называют локальными. Онидействуют только в рамках подпрограммы и недоступны операторам основнойпрограммы. Глобальные и локальные имена размещаются в разных областяхоперативной памяти (ОП) и существуют только на время работы соответствующегопрограммного блока.А как в Python?Слово «действуют» недаром взято в кавычки, так как оно, вообщеговоря, зависит от языка программирования. В Python есть защита отдействия, которое относится к крайне не рекомендуемым, но котороеновички игнорируют так же часто, как и прочие полезныерекомендации.Это действие – изменение глобальной переменной в локальной областивидимости неявным образом. Python просто не позволит этого сделать,в силу того, как в языке организовано объявление переменных.Единственное «действие», которое он позволит – это прочитатьсодержимое переменной, но не изменить его, не заявив о подобномнамерении специальной декларацией.

Продемонстрируем напримерах.5Воробьева И.А. «Информатика. Язык Питон»фрагмент кодакомментарииx = 50def F1():print('В F1 x равен ', x)– читаем(видим) глобальный xdef F2():x += 22print(' В F2 x равен ', x)– пытаемся изменить глобальный xи напечатать егоdef F3():x = 22print(' В F3 x равен ', x)def F4(a):a = a + 22print(' В F4 x равен ', x)return a– может мы и думаем, что это изменениеглобальной переменной, но это вовсе не так –здесь x – локальная переменная вообще никакне связанная с глобальным x– изменим параметр, который передадут– читаем (видим) глобальный x– возвратим измененный параметррезультат на экране, комментарииF1()print('x по прежнему ', x)В F1 x равен 50x по прежнему 50Глобальная переменная видна внутрифункции.F2()print('x по прежнему ', x)Вызов F2() спровоцирует ошибку «localvariable 'd' referenced before assignment»,так как Python считает, что мыпытаемся использовать локальнуюпеременную до ее объявления.F3()print('x по прежнему ', x)В F3 x равен 22x по прежнему 506Воробьева И.А.

«Информатика. Язык Питон»x = F4(x)print('x изменен ЯВНО, чтохорошо ', x)В F4 x равен 50x изменен ЯВНО, что хорошо 72Глобальная переменная была измененачерез передачу и возврат параметра –это явное изменение, которое непройдет для вас неожиданным образом– повышает надежность кода.print('Хотим увидеть чемуравно a ', a)Cпровоцируем ошибку «NameError: name'a' is not defined»Переменные из локальной области недоступны на верхнем уровне.В таблице выше продемонстрирован так называемый принципматрешки, который работает для области видимости переменных: всепеременные, объявленные во внешней «матрешке», виднывнутренней «матрешке», а все, объявленные во внутренней, не виднывнешней.Этот же принцип срабатывает, но в обратную сторону для ситуации,когда переменные имеют одинаковые имена: мы этот принцип виделив примере для функции F3() – как только объявили локальнуюпеременную с таким же именем , как и у глобальной, так сразу жеперекрыли себе доступ видимости к глобальному .Примеры ниже демонстрируют область видимости глобальных илокальных переменных при одинаковых именах.

Они же показывают,почему лучше избегать одинаковых имен при недостаточной подготовкепрограммиста: по сути, совершенно разные переменные имеютодинаковое название – это нормальная ситуация (она носит названиесокрытие имен), так как у переменных c одинаковыми именами разныеобласти видимости. Опытный программист четко разницу понимает, ановичок может воспринимать разные переменные, как одну, что грозитошибками. В этой же связи, важные глобальные переменные неназывают типичными «рабочими» названиями, такими как или .7Воробьева И.А.

«Информатика. Язык Питон»Таблица 8.3что будет в переменных(на экране)№program Pr11 Num = 0//глобальная2def Prov( a):Num=5 //локальная345print('num1= ', Num)a=39return a67№12Prov(Num)print('num2= ', Num)program Pr2Num = 0Bam = 23456def Prov(Num)print('num1= ', Num)Num=5print('num2= ', Num)return Num78910Prov(Num);print('num3= ', Num);Prov(Bam);print('num4= ', Bam);num1 = 5num2 = 391-й вызов2-й вызовnum1 = 0num1 = 2num2 = 5num2 = 5num3 = 5num4 = 5Изменение области видимости переменныхЗарезервированное слово «global»Чтобы принудительно нарушить запрет Python на изменение глобальных имен внутри функций и присвоить некоторое значение пере-8Воробьева И.А. «Информатика.

Язык Питон»менной, определённой в головном модуле программы, необходимо использовать зарезервированное слово global.Зарезервированное слово global используется внутри подпрограммдля того, чтобы объявить, что– это глобальная переменная,разрешенная к изменению, а значит, когда мы присваиваем значениеименивнутри функции, это изменение отразится на значениипеременной в основном блоке программы.Замечание. Используя одно зарезервированное слово global, можнообъявить сразу несколько переменных: global x, y, z.Использование зарезервированного слова global достаточно яснопоказывает читающему код подпрограммы, что переменная объявлена всамом внешнем блоке.фрагмент кодарезультат, комментарииx = 50def F2():global x# указываем, что это глобальный xprint(' В F2 x равен ', x)x = 22# изменяем глобальный xprint('F2 получила доступ к # и напечатать его новое значениеx и х = ', x)________________на экране:print('x равен ', x)x равен 50F2()В F2 x равен 50F2 получила доступ к x и х = 22print('x изменился на верхнем уровне ', x)x изменился на верхнем уровне 229Воробьева И.А.

«Информатика. Язык Питон»Зарезервированное слово «nonlocal»Есть ещё один тип области видимости, называемый нелокальнойобластью видимости, который представляет собой нечто среднее междупервыми двумя. Нелокальные области видимости встречаются, когдавы определяете функции внутри функций.Давайте рассмотрим пример, приведенный в [1]:фрагмент кодарезультат, комментарииx = 56на экране:def F_out():x=2print(' В F_out x равен ', x)def F_in():nonlocal xx=5F_in()print('Локальный xсменился на', x)________________print(x)F_out()print('Глобальный xсменился на' x)56В F_out x равен 2Локальный x сменился на 5Глобальный x сменился на 56_________________________Когда мы находимся внутри F_in,переменная , определённая в первойстроке F_out находится ни в локальнойобластивидимости(определениепеременной не входит в блок F_in), ни вглобальной области видимости (онатакже и не в основном блокепрограммы).

Мы объявляем, что хотимиспользовать именно эту переменную, следующим образом: nonlocal .Замечание. Попробуйте заменить «nonlocal x» на «global x», а затемудалить это зарезервированное слово, и пронаблюдайте за разницеймежду этими двумя случаями.10Воробьева И.А. «Информатика. Язык Питон»Основные рекомендации для начинающего программиста можносвести к нескольким простым правилам, соблюдение которых поможетизбежать лишних ошибок.Таблица 8.4.РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ ГЛОБАЛЬНЫХ И ЛОКАЛЬНЫХ ИМЕН Помните, что подпрограмма взаимодействует с вызывающей программой с помощью параметров, а не за счет видимости глобальных переменных – во многом именно для этого и была придумана синтаксическая конструкция «подпрограмма» – для сокрытиявидимости и локализации ответственности за ошибку. Осуществляйте верное деление на подзадачи и все переменные,которые имеют отношение к алгоритму решения подзадачи делайте локальными и полностью подконтрольными ей.

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

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

Тип файла PDF

PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.

Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.

Список файлов лекций

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