Найти тему
programmer's notes (python and more)

Основы программирования на языке Python. Приложение 1 к уроку 24. Функции (параметры)

Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes.

Приложение к видеоуроку 24

Передача параметров в функцию в Python

Лично я, в силу того, что начал программировать в незапамятные времена, привык к обычным позиционным параметрам и редко выхожу за рамки этого подхода. Наличие в Python объектов, типа коллекция, позволяет легко оттолкнутся от позиционного подхода и получить совершенно универсальный способ передачи параметров. В качестве всего одного параметра достаточно взять список (или другую коллекцию). А уж из чего будет состоять список, из каких типов и сколько будет там элементов - это уже ваше дело.

Программа primer60.py, текст см. ниже
Программа primer60.py, текст см. ниже
primer60.py

Результат выполнения программы

110

Хотелось сейчас на этом и закончить ;), но я продолжу. Теперь, собственно перейдем к возможным технологиям передачи параметров, предусмотренным в Python.

1. Позиционные параметры.

Позиционные параметры предполагают, во-первых, одинаковое количество параметров в определении функции и при ее вызове. Во-вторых, полное соответствие передаваемого параметра, параметру в заголовке функции по позиции в списке параметров. Смотрим следующую программу.

primer61.py, текст см. ниже
primer61.py, текст см. ниже
primer61.py

Подчеркнем, что x -> a, y -> b, z -> c.

Результат выполнения программы

110

2. Захват лишних позиционных параметров

Это дополнительный механизм, позволяющий обработать ситуацию, если количество передаваемых параметров будет больше, чем указано в определении функции. Рассмотрим следующую программу.

primer62.py, текст см. ниже
primer62.py, текст см. ниже
primer62.py

Мы видим, что кроме двух обычных (позиционных параметров) есть еще параметр *s. Так вот, если параметров будет больше, то переменная s примет на себе излишек параметров. Будет создан список лишних параметров. Точнее все-таки тип переменной s это кортеж.

Результат выполнения программы

210
110
60

3. Параметры по умолчанию

В предыдущем примере мы рассматривали ситуацию, когда количество отправляемых параметров может быть больше, чем указано в определении функции. Но может быть обратная ситуация: часть параметров в функции объявляются, как параметры по умолчанию. Ниже представлена программа, в которой параметр s3 является параметром по умолчанию. Ему присваивается значение, которое срабатывает, если количество параметров при вызове будет равно 2.

primer63.py, текст см. ниже
primer63.py, текст см. ниже
primer63.py

Результат выполнения программы

-970
20

Особо обращаю внимание на то, что параметры по умолчанию должны идти после позиционных (!)

4. Именованные параметры

Отличить параметр друг от друга можно по их позиции в списке. Но можно за основу взять те имена, которые даны параметрам при определении функции. Тогда при вызове можно использовать эти имена.

primer64.py, текст см. ниже
primer64.py, текст см. ниже
primer64.py

В представленном примере первый параметр работает как позиционный. Т.е. b -> k. А вот два следующих параметра при вызове передаются как именованные. И порядок их уже не имеет значение.

Результат выполнения программы

180

Именованные параметры должны идти после позиционных (!)

5. Совмещение именованных параметров и параметров по умолчанию.

Приведем пример программы, где присутствуют параметры по умолчанию и именованные параметры.

primer65.py, текст см. ниже
primer65.py, текст см. ниже
primer65.py

Результат выполнения программы

180

6. Позиционные параметры, захват лишних позиционных и лишних именованных параметров

В примере ниже есть лишние позиционные параметры и лишние именованные параметры. Если лишние позиционные параметры попадают в кортеж, то лишние именованные параметры попадают в словарь.

primer66.py, текст см. ниже
primer66.py, текст см. ниже
primer66.py

Лишним раз заметим, что параметр k - это словарик, в котором ключами являются имена параметров, а значениями - значения этих параметров.

Результат выполнения программы

500

Пока все. Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Если вы уже через неделю не можете узнать свой код, значит вы много программируете.
Если вы уже через неделю не можете узнать свой код, значит вы много программируете.