Справочник от Автор24
Поделись лекцией за скидку на Автор24

Пользовательские функции

  • 👀 550 просмотров
  • 📌 506 загрузок
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Пользовательские функции» pdf
Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . Пользовательские функции Создать свою собственную пользовательскую функцию на Python очень просто. Синтаксис определения пользовательских функций Python выглядит следующим образом: def name(параметр1, параметр2, . . .): тело Пример 6-1(файл primer6-1.py) def sum(x, y): return x + y print(sum(11, 100)) print(sum('Hel', 'lo')) Вывод 111 Hello В некоторых языках функция, не возвращающая значение, называется процедурой. В Python функции, не содержащие команды return, не будут процедурами. Все подпрограммы Python являются функциями. Если в теле функции не выполняется команда return, возвращается специальное значение None. Пример 6-2(файл primer 6-2.py) def answer(): print('Здравствуйте !') answer() 1 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . Вывод Здравствуйте ! Оператор return в теле функции является необязательным, как показывает данный пример. После выполнения return никакие другие команды в теле функции не выполняются. Пример 6-3(файл primer 6-3.py) def sum(x, y): return x + y print('Bye') print(sum(11, 100)) print(sum('Hel', 'lo')) Вывод 111 Hello Здесь мы видим, что в теле функции после оператора return стоит оператор print('Bye') ,однако данный оператор уже НЕ ВЫПОЛНЯЕТСЯ. Пример 6-4(файл primer 6-4.py) Факториал числа. def fact(n): """Возвращает факториал заданного числа.""" r = 1 while n > 0: r = r * n n = n - 1 return r num=int(input("Введите число n - ")) print("Факториал {0} равен {1}".format(num,fact(num))) В данном примере с помощью функции fact(n) мы можем вычислить факториал любого целого числа. 2 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . Строка в тройных кавычках в теле функции – это так называемая «строка документации». Строки документации предназначены для описания внешнего поведения функции и получаемых ею параметров, тогда как комментарии должны содержать внутренние сведения о работе кода. Строки документации следуют сразу же после определений функций; обычно они заключаются в тройные кавычки, что позволяет создавать многострочные описания. Существуют специальные программы просмотра, извлекающие начало строк документации. Чаще всего в начале многострочных строк документации следует сводное описание функции, далее идёт пустая вторая строка, и после неё следует остальная информация. Значение строки документации функции fact() можно просмотреть, если выполнить: print(fact.__doc__) Проверим это и получим Возвращает факториал заданного числа. Параметры функций. В языке Python предусмотрено три способа определения параметров функций: 1) Позиционные параметры – параметры передаются функциям в соответствии с позицией (как во многих ЯП). Данный механизм передачи параметров является основным, например, в Pascal (все виды), C(C++,C#) и других языках. При позиционной передаче количество параметров в точке вызова должно точно соответствовать количеству параметров в определении функции; в противном случае возникает исключение TypeError 3 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . Пример 6-5(файл primer 6-5.py) Позиционная передача параметров. def person(name,age,married,num_childs): if married: print("{0}, возраст {1}, состоит в браке и имеет {2}\ детей.".format(name,age,num_childs)) else: print("{0}, возраст {1}, не состоит в браке и имеет {2}\ детей.".format(name,age,num_childs)) nam="Иван Иванов"; ag=30; mar=True; nch=2; person(nam,ag,mar,nch) nam="Мария Петрова"; ag=22; mar=False; nch=0; person(nam,ag,mar,nch) # Неверная передача позиционных парметров #person(nam,ag) # Ошибка 1 - Неверное число параметров # Несоответствие типов параметров Ошибка 2 #person(nch,mar,ag,nam) В данном примере в функцию person передаётся 4 параметра разного типа: строковый name числовой age булевый married числовой num_childs Если изменить число параметров (Ошибка 1), это приведёт к выбросу исключения типа TypeError: person() missing 2 required positional arguments: 'married' and 'num_childs' Если число параметров совпадает, но не совпадают их типы (Ошибка 2), то Python не выбрасывает исключение (в отличие от практически всех других языков программирования). 4 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . Другими словами, несоответствие типов параметров (в отличие от их количества) при передаче в функцию в Python допускается. Хотя это может привести к неожиданным результатам (как в нашем случае, в случае ошибки 2). Значения по умолчанию Параметрам функций могут назначаться значения по умолчанию; они присваиваются в первой строке определения функции: def fun(арг1, арг=умолч2, арг3=умолч3, . . .) Значения по умолчанию могут присваиваться любому количеству параметров, но они должны определяться последними в списке параметров. Количество передаваемых в функцию аргументов должно быть большим или равным числу параметров, не имеющих значений по умолчанию. Следующая функция вычисляет результат возведения x в степень y. Но если значение y не указано при вызове функции, по умолчанию используется значение 2, и функция просто возводит аргумент в квадрат: Пример 6-6(файл primer 6-6.py) Значения по умолчанию. def power(x, y=2): r = 1 ... while y > 0: ... r = r * x ... y = y - 1 ... return r ... Вот как это работает: power(3, 3) 27 5 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . power(3) 9 2) Передача аргументов по имени параметра (по ключевым словам). Пример 6-7(файл primer 6-7.py) Передача аргументов по имени параметра. def power(x, y): ... r = 1 ... while y > 0: ... r = r * x ... y = y - 1 ... return r power(y=2,x=3) 9 Так как в последнем примере указаны имена параметров, их позиция не играет роли (имя перевешивает позицию). Передача по ключевым словам в сочетании с возможностью определения аргументов по умолчанию может быть чрезвычайно полезной, когда мы определяем функции с множеством возможных аргументов, большинство из которых имеет значения по умолчанию. 3) Переменное количество аргументов Иногда возникает ситуация, когда мы заранее не знаем возможное число аргументов функции. Python предлагает выход из данной ситуации. Здесь есть 2 варианта передачи переменного числа аргументов 1) через кортеж; 2) через словарь. 6 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . 1) Передача через кортеж Рассмотрим данный вариант на примере. # Пример 6-8. Переменное число аргументов функции def maximum(*numbers): if len(numbers) == 0: return None else: maxnum = numbers[0] for n in numbers[1:]: if n > maxnum: maxnum = n return maxnum print(maximum(12, 7, 4)) print(maximum(1, 5, 9, -2, 2)) Вывод 12 9 Здесь мы определяем функцию maximum, которая обнаруживает максимальное число в списке чисел. Как это работает? Если имени последнего параметра функции предшествует символ * (в нашем примере - *numbers), все лишние аргументы без ключевых слов в вызове функции (то есть позиционные аргументы, не связанные с другим параметром) объединяются и присваиваются указанному параметру в формате кортежа. Т.е. в нашем примере в первом случаем кортеж это (12, 7, 4), во втором случае - (1, 5, 9, -2, 2). 2) Передача через словарь. Также можно обработать произвольное количество аргументов, передаваемых по ключевым словам. Если последний параметр в списке снабжён префиксом **, все лишние аргументы, передаваемые по ключевым словам, объединяются в словарь. 7 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . Ключом для каждого элемента словаря является ключевое слово (имя параметра) «избыточного» аргумента, а значением — сам аргумент. Аргумент, передаваемый по ключевому слову, считается избыточным, если ключевое слово, по которому он передавался, не соответствует ни одному из имён параметров в определении функции. Пример 6-9. Передача переменного числа параметров через словарь def example_fun(x, y, **other): print("x: {0}, y: {1}, keys in 'other': {2}".format(x,y, list(other.keys()))) other_total = 0 for k in other.keys(): other_total = other_total + other[k] print("The total of values in 'other' is {0}".format(other_total)) example_fun(2, y="1", foo=3, bar=4) Вывод x: 2, y: 1, keys in 'other': ['foo', 'bar'] The total of values in 'other' is 7 Локальные, нелокальные и глобальные переменные Локальная переменная – это переменная, объявленная и применяемая внутри функции (в примере выше – это переменная other_total). Глобальная переменная. Глобальную переменную можно явно объявить глобальной перед её использованием, для чего применяется ключевое слово global. Функция может обращаться к глобальным переменным и изменять их. Такие переменные существуют за пределами функций; обращаться к ним и изменять их также могут другие функции (если эти переменные будут объявлены в них глобальными), или же код, не находящийся внутри функции. Следующий пример демонстрирует различия между локальными и глобальными переменными: >>> def fun(): 8 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . ... global a ... a = 1 ... b = 2 ... В этом примере определяется функция, для которой a является глобальной переменной, а b — локальной. Эта функция пытается изменить a и b. А теперь протестируем эту функцию: >>> a = "one" >>> b = "two" >>> fun() >>> a 1 >>> b 'two' lambda – выражения С помощью инструкции lambda можно создавать так называемые анонимные маленькие функции, которые могут быстро определяться «на месте». Анонимные функции могут содержать лишь одно выражение. lambda функции, в отличие от обычной, не требуется инструкция return, а в остальном, ведёт себя точно так же. lambda функции выполняются быстрее, чем обычные функции. Пример 6-10(файл primer 6-10.py) func = lambda x, y: x + y print(func(1, 2)) print(func('a', 'b')) x=(lambda x, y: x + y)(1, 2) print(x) y=(lambda x, y: x + y)('a', 'b') print(y) Применять lambda-функции имеет смысл в тех случаях, когда какое-то выражение встречается в программе неоднократно. 9 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . Исключения в Python. Исключения — механизм современных языков программирования, предназначенный специально для обработки аномальных ситуаций во время выполнения программы. Исключения чаще всего используются для обработки ошибок, возникающих в ходе выполнения программ, но они также находят эффективное применение для многих других целей. Python предоставляет набор исключений для многих стандартных ситуаций, а пользователи могут определять собственные исключения для своих целей. Исключения (exceptions) (или исключительные ситуации) – это тип данных в Python. Исключения необходимы для того, чтобы сообщать программисту об ошибках и дать ему возможность их обработать (т.е. отреагировать на них). Типичный пример исключения - деление на ноль: print(10/0) Вывод ZeroDivisionError: division by zero Можно обработать исключение с помощью конструкции try…except . В этом случае сообщение об ошибке выше не выводится. Пример 6-11 (файл primer 6-11.py) try: print(10/0) except: print('Произошло деление на 0') Вывод Произошло деление на 0 10 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . Генеририрование исключения называется выдачей, или инициированием, или выбросом (throw) исключения. Реакция на исключение называется перехватом исключения, а код, обрабатывающий исключение, называется кодом обработки исключения, или просто обработчиком исключения. Можно различать исключения и по разному реагировать на них. Список исключений языка Python: BaseException SystemExit KeyboardInterrupt GeneratorExit Exception StopIteration ArithmeticError FloatingPointError OverflowError ZeroDivisionError AssertionError AttributeError BufferError EOFError ImportError ModuleNotFoundError LookupError IndexError 11 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . KeyError MemoryError NameError UnboundLocalError OSError BlockingIOError ChildProcessError ConnectionError BrokenPipeError ConnectionAbortedError ConnectionRefusedError ConnectionResetError FileExistsError FileNotFoundError InterruptedError IsADirectoryError NotADirectoryError PermissionError ProcessLookupError TimeoutError ReferenceError RuntimeError NotImplementedError RecursionError SyntaxError IndentationError TabError SystemError TypeError 12 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . ValueError UnicodeError UnicodeDecodeError UnicodeEncodeError UnicodeTranslateError Warning DeprecationWarning PendingDeprecationWarning RuntimeWarning SyntaxWarning UserWarning FutureWarning ImportWarning UnicodeWarning BytesWarningException ResourceWarning Набор исключений Python имеет иерархическую структуру, на что указывают отступы в списке исключений. Алфавитный список исключений можно получить из модуля __builtins__. Исключения также могут инициироваться явно командой raise. raise SystemExit # Останов работы программы Пример 6-12 (файл primer 6-12.py) # Обработка исключения ZeroDivisionError try: print(10/0) except ZeroDivisionError: print("Ошибка деления на 0 !") 13 Объектно-ориентированный анализ и программирование. Лекция 2019 – 6,7 . Здесь мы обрабатываем исключение ZeroDivisionError. Пример 6-13 (файл primer 6-13.py) try: print(10/0) except SyntaxError: print("Ошибка деления на 0 !") Здесь мы обрабатываем исключение SyntaxError, а не ZeroDivisionError, поэтому в итоге получаем. Traceback (most recent call last): File "C:/2019/УЧЁБА ОСЕНЬ 2019/СОВРЕМЕННЫЕ СРЕДЫ РАЗРАБОТКИ ПО (ЭБб-16-1,2)/ЛЕКЦИИ/Лекция - 5/primer2-15++.py", line 3, in print(10/0) ZeroDivisionError: division by zero Если не указать вид исключения, от обработчик будет реагировать на любое исключение любого типа. Рассмотрим пример. num=int(input("Введите число - ")) print(10/num) Здесь возможно возникновение 2-х разных исключений. Обработаем их по отдельности. Пример 6-14 (файл primer 6-14.py) # Обработка нескольких исключений try: num=int(input("Введите число - ")) print(10/num) except ZeroDivisionError: print("Ошибка деления на 0 !") except ValueError: print("Неверный ввод данных !") 14
«Пользовательские функции» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot