Доброго времени суток, читатели, зрители моего канала programmer's notes.
Приложение к видеоуроку 24
Передача параметров в функцию в Python
Лично я, в силу того, что начал программировать в незапамятные времена, привык к обычным позиционным параметрам и редко выхожу за рамки этого подхода. Наличие в Python объектов, типа коллекция, позволяет легко оттолкнутся от позиционного подхода и получить совершенно универсальный способ передачи параметров. В качестве всего одного параметра достаточно взять список (или другую коллекцию). А уж из чего будет состоять список, из каких типов и сколько будет там элементов - это уже ваше дело.
Результат выполнения программы
110
Хотелось сейчас на этом и закончить ;), но я продолжу. Теперь, собственно перейдем к возможным технологиям передачи параметров, предусмотренным в Python.
1. Позиционные параметры.
Позиционные параметры предполагают, во-первых, одинаковое количество параметров в определении функции и при ее вызове. Во-вторых, полное соответствие передаваемого параметра, параметру в заголовке функции по позиции в списке параметров. Смотрим следующую программу.
Подчеркнем, что x -> a, y -> b, z -> c.
Результат выполнения программы
110
2. Захват лишних позиционных параметров
Это дополнительный механизм, позволяющий обработать ситуацию, если количество передаваемых параметров будет больше, чем указано в определении функции. Рассмотрим следующую программу.
Мы видим, что кроме двух обычных (позиционных параметров) есть еще параметр *s. Так вот, если параметров будет больше, то переменная s примет на себе излишек параметров. Будет создан список лишних параметров. Точнее все-таки тип переменной s это кортеж.
Результат выполнения программы
210
110
60
3. Параметры по умолчанию
В предыдущем примере мы рассматривали ситуацию, когда количество отправляемых параметров может быть больше, чем указано в определении функции. Но может быть обратная ситуация: часть параметров в функции объявляются, как параметры по умолчанию. Ниже представлена программа, в которой параметр s3 является параметром по умолчанию. Ему присваивается значение, которое срабатывает, если количество параметров при вызове будет равно 2.
Результат выполнения программы
-970
20
Особо обращаю внимание на то, что параметры по умолчанию должны идти после позиционных (!)
4. Именованные параметры
Отличить параметр друг от друга можно по их позиции в списке. Но можно за основу взять те имена, которые даны параметрам при определении функции. Тогда при вызове можно использовать эти имена.
В представленном примере первый параметр работает как позиционный. Т.е. b -> k. А вот два следующих параметра при вызове передаются как именованные. И порядок их уже не имеет значение.
Результат выполнения программы
180
Именованные параметры должны идти после позиционных (!)
5. Совмещение именованных параметров и параметров по умолчанию.
Приведем пример программы, где присутствуют параметры по умолчанию и именованные параметры.
Результат выполнения программы
180
6. Позиционные параметры, захват лишних позиционных и лишних именованных параметров
В примере ниже есть лишние позиционные параметры и лишние именованные параметры. Если лишние позиционные параметры попадают в кортеж, то лишние именованные параметры попадают в словарь.
Лишним раз заметим, что параметр k - это словарик, в котором ключами являются имена параметров, а значениями - значения этих параметров.
Результат выполнения программы
500
Пока все. Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.