Uploaded by gorelovaoa

konspekt5. procedury i funkcii v python

advertisement
Конспект. Язык программирования Python
Процедуры и функции
Учитель информатики Батракова Л.В.
Алгоритм решения задачи проектируется путем разбиения всей задачи на отдельные подзадачи.
Обычно подзадачи реализуются в виде подпрограмм.
Определение: Подпрограмма - это отдельная функционально независимая часть программы.
Подпрограммы решают три важные задачи:
 избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты;
 улучшают структуру программы, облегчая ее понимание;
 повышают устойчивость к ошибкам программирования и непредвидимым последствиям при
модификациях программы.
Очень важно понимать, что в подпрограммы выделяется любой логически законченный фрагмент
программы.
Подпрограмму можно сравнить с «черным ящиком», когда мы знаем, что поступает на вход и что при этом
получается на выходе, а внутренности «черного ящика» часто бывают от нас скрыты. Примером является
банкомат. На вход банкомата поступает пластиковая карточка (пин-код, денежная сумма), на выходе мы
ожидаем получить запрашиваемую сумму. Нас не очень сильно интересует принцип работы банкомата до
тех пор, пока он работает без сбоев.
Подпрограммы могут быть стандартными, т.е. определенными
(пользовательскими), т.е. определенными программистом.
системой,
и
собственными
Определение: Стандартная подпрограмма (процедура или функция) - подпрограмма, включенная в
библиотеку программ, доступ к которой обеспечивается средствами языка программирования.
Вызывается она по имени с заданием фактических параметров. Из набора стандартных процедур и
функций по обработке одного типа информации составляются модули. Каждый модуль имеет своё имя
(например, модулями math, random и др.). Доступ к процедурам и функциям модуля осуществляется при
подключении этого модуля оператором import.
Преимущества использования подпрограмм:
 декомпозиция сложной задачи на несколько более простых подзадач: это один из двух главных
инструментов структурного программирование (второй - структуры данных);
 уменьшение дублирования кода и возможность повторного использования кода в нескольких
программах - следование принципу DRY «не повторяйся» (англ. Don’t Repeat Yourself);
 распределение большой задачи между несколькими разработчиками или стадиями проекта;
 сокрытие деталей реализации от пользователей подпрограммы;
 улучшение отслеживания выполнения кода (большинство языков программирования предоставляет стек
вызовов подпрограмм).
Недостатком использования подпрограмм можно считать накладные расходы на вызов подпрограммы,
однако современные трансляторы стремятся оптимизировать данный процесс.
1
Конспект. Язык программирования Python
Процедуры и функции
Учитель информатики Батракова Л.В.
Подпрограммы бывают двух типов – процедуры и функции.
В Python нет формального разделения подпрограмм на функции и процедуры (как, например, в Паскале
или Си), и процедурой можно считать функцию, возвращающую пустое значение - в основном
используется единственный термин - функция.
Python – функциональный язык программирования, поэтому функция в Python является основой при
написании программ.
В языке Python много стандартных функций, объединенных в модули, например, функции модуля math
(см. конспект 2).
В качестве примера рассмотрим функцию с именем abs, принимающую на вход один аргумент – объект
числового типа и возвращающую абсолютное значение для этого объекта.
Пример вызова функции abs с аргументом -9 имеет вид:
>>> abs(-9)
9
>>> d = 1
>>> n = 3
>>> abs(d - n)
2
>>> abs(-9) + abs(5.6)
14.6
>>>
Для объявления процедуры или функции в Python используется ключевое слово def:
def function_name([parameters]):# parameters:параметры функции(через запятую)
suite
# Тело функции
Функция в Python может возвращать результат своего выполнения, используя оператор return.В случае,
если он не был указан или указан пустой оператор return, возвращается специальное значение None.
def function_name([parameters]):# parameters:параметры функции(через запятую)
suite
# Тело функции
return <result>
Результат вызова функции можно:
 присвоить переменной,
2
Конспект. Язык программирования Python
Процедуры и функции
Учитель информатики Батракова Л.В.

использовать его в качестве операндов математических выражений, т.е. составлять более сложные
выражения.
 Процедура отличается от функции тем, что функция в Python после выполнения должна
возвращать какое-либо значение, а процедура просто выполняет команды.
Ключевое слово def для Python означает, что дальше идет описание функции. После def указывается имя
функции, затем в скобках указывается параметр, которому будет присваиваться значение при вызове
функции. Параметры функции – обычные переменные, которыми функция пользуется для внутренних
вычислений. Переменные, объявленные внутри функции, называются локальными и не видны вне
функции. После символа «:» начинается тело функции. В интерактивном режиме Python самостоятельно
поставит отступ в 4 пробела от края экрана, тем самым обозначив, где начинается тело функции.
Выражение, стоящее после ключевого слова return будет возвращаться в качестве результата вызова
функции. В интерактивном режиме создание функции имеет следующий вид (для завершения ввода
функции необходимо два раза нажать клавишу <Enter>, дождавшись приглашения для ввода команд):
Примеры:
1. Процедура вывода символа «*»:
def printline(symbol,n):
print(symbol * n)
printline('*', 10)
# вызов процедуры
2. Функция вычисление факториала:
def factorial(n):
prod = 1
i = 2
while i<=5:
prod *= i
i +=1
return prod
print(factorial(5))
# вызов функции
3. Процедура вычисления НОД двух чисел по алгоритму Евклида:
def nod1(a, b):
while a != b:
if a > b:
a = a - b
else:
b = b - a
print(a)
nod1(24, 42) # вызов процедуры
4. Функция вычисления НОД двух чисел по модифицированному алгоритму Евклида:
def nod2 (a,b):
while a != 0 and b != 0:
if a > b:
a = a % b
else:
b = b % a
Return a + b
3
Конспект. Язык программирования Python
Процедуры и функции
Учитель информатики Батракова Л.В.
print(nod2(24,42)) # вызов функции
При вызове процедуры или функции могут передаваться параметры (аргументы). Это фактические
параметры, которые могут быть:
 числом
 символом
 переменной
 выражением.
Переменные, которые введены в основной программе, называются глобальными (общими). Их могут
использовать все подпрограммы (процедуры и функции).
Переменные, которые используются только внутри процедуры или функции, называются локальными
(местными). К ним можно обращаться только внутри этой подпрограммы, остальные подпрограммы и
основная программа их не видят. Такой прием называется инкапсуляцией (от латинского «помещение в
капсулу»).
Локальная переменная создается только при вызове процедуры или функции. Как только работа
подпрограммы будет закончена, все локальные переменные будут удаляться из памяти.
Имена локальных переменных в каждой подпрограмме можно выбирать независимо от имён локальных
переменных других подпрограмм. Это очень облегчает коллективную работу программистов, каждый из
которых может использовать любые имена локальных переменных в своих процедурах.
Посмотрим на такую программу:
def show():
print( i )
В процедуре выводится значение i, но откуда его взять? Транслятор сначала ищет локальную переменную с
таким именем – её нет. Потом он начинает искать глобальную переменную: если такая переменная есть, на
экран выводится её значение, если нет – будет выдано сообщение об ошибке.
Теперь посмотрим на другую процедуру:
def showLocal():
i = 2
print( i )
Даже если существует глобальная переменная i, в первой строчке этой процедуры будет создана новая
локальная переменная i, и её значение (2) появится на экране. Что же делать, если в процедуре необходимо
изменить именно глобальную переменную? Пусть переменная i – глобальная, её значение задано в
основной программе: i = 15. Изменим её значение в процедуре. Для этого нужно явно сказать, что она
глобальная, используя команду global:
def showGlobal():
global i
i = 2
print( i )
Эта процедура работает с глобальной переменной i. Она присвоит ей новое значение 2 (это «увидят» все
остальные подпрограммы!) и выведет его на экран. Ещё раз подчеркнём, что, если мы забудем написать
инструкцию global, транслятор, не сомневаясь, создаст в памяти новую локальную переменную и будет с
ней работать. Глобальная переменная при этом не изменится.
 Нужно стараться писать подпрограммы, которые не обращаются к глобальным переменным (как
говорят, не имеют побочных эффектов). Работа процедуры в идеале должна зависеть только от переданных
значений параметров, тогда можно легко использовать её в другом проекте. К сожалению, в языке Python
это не всегда выполнимо.
Выводы:
 Подпрограммы делятся на процедуры и функции.
 Процедура – это вспомогательный алгоритм, решающий самостоятельную задачу, который может
использоваться несколько раз.
4
Конспект. Язык программирования Python
Процедуры и функции
Учитель информатики Батракова Л.В.






Функция — это подпрограмма, которая возвращает результат (число, строку символов и др.).
Вызов функции можно использовать в арифметических выражениях и условиях так же, как и
переменную того типа, который возвращает функция.
В теле функции можно вызывать другие функции и процедуры.
Локальная переменная — это переменная, объявленная внутри подпрограммы. Другие
подпрограммы и основная программа не могут к ней обращаться.
Параметр — это величина, от которой зависит работа подпрограммы. Параметр имеет имя, в теле
подпрограммы с ним можно работать так же, как с локальной переменной.
Аргумент — это значение параметра, которое передаётся подпрограмме.
  Записать в тетрадь (шпаргалка):
Подпрограммы
Формат процедуры
def function_name([parameters])
suite
def nod1(a, b):
while a != b:
if a > b:
a = a - b
else:
b = b - a
print(a)
Формат функции
def function_name([parameters]):
suite
return <result>
Примеры
def nod2 (a,b):
while a != 0 and b != 0:
if a > b:
a = a % b
else:
b = b % a
Return a + b
nod1(24, 42) # вызов процедуры
print(nod2(24,42)) # вызов функции
Задачи:
1. Напишите процедуру, которая выводит на экран в столбик все цифры переданного ей числа,
начиная с последней.
2. Напишите процедуру, которая выводит на экран все делители переданного ей числа (в одну строчку
через пробел).
3. Напишите функцию, которая находит количество цифр в десятичной записи числа.
4. Напишите функцию, которая находит количество единиц в двоичной записи десятичного числа.
5. Напишите функцию, которая определяет минимальное из пяти чисел.
Используемые материалы:
1. file:///F:/Питон/book_Федоров%20+.pdf
2. https://www.yuripetrov.ru/edu/python/ch_05_01.html
3. http://itrobo.ru/programmirovanie/kurs-python.html
4. https://pythonworld.ru/samouchitel-python
5. https://www.kpolyakov.spb.ru/school/pycpp.htm
5
Download