В предыдущих постах этого блога мы уже касались темы объявления функций. Так же упоминалось, что в функции может быть не одна, а несколько переменных.
Ниже рассмотрим нюансы и ошибки, которые могут возникнуть при использовании такого инструмента.
Как мы обычно это делаем, разберем все на примере.
Изображение Alexa с сайта Pixabay
Руководство одного из зоопарков обратилось к нам с техническим заданием.
Нам нужно написать функцию, которая будет выводить в каком вольере расположилось каждое животное.
Для нас такое задание не было сложным и мы справились почти мгновенно:
Изображение автора
Мы просто перечислили аргументы функции через запятую и передаем их при каждом использовании.
Однако случилось так, что Медведя собрались переселять, а номер вольера для него пока не определен.
Как думаете, что будет, если мы не станем передавать в функцию номер вольера (один из аргументов) для Медведя?
Изображение автора
Программа ожидаемо завершилась ошибкой "info() missing 1 required positional argument: 'aviary'", которая означает, функция info() не получила 1 позиционный аргумент, а именно "aviary".
Что же означает термин "позиционный"?
Давайте так же посмотрим на практике.
Попробуем вернуть Медведю его номер вольера, но передадим аргументы в обратном порядке: сначала номер, потом уже "Медведь":
Изображение автора
Функция не "сломалась", но обратите внимание на первую строку вывода: получилось, что 2 расположился в вольере Медведь.
Это именно потому, что аргументы функции позиционные и передаваться они должны именно в том порядке, в котором расположились в объявленной функции.
Кстати, если бы мы попытались совершить в теле функции операции, которые допустимы только для числа, а на этом месте оказалась бы строка, то программа и вовсе завершилась бы ошибкой.
Как думаете, что получится, если мы захотим передать в функцию не только номер вольера Медведя, где он живет сейчас, но и тот, в который его собираются переселить?
Изображение автора
Верно! Работа программы завершится ошибкой "info() takes 2 positional arguments but 3 were given", которая означает, что функция info() принимает 2 позиционных аргумента, но было передано 3.
Обращайте внимание на описанные детали при работе с функциями.
(Изображение Alexa с сайта Pixabay)
Мы используем cookie-файлы, чтобы улучшить сервисы для вас. Если ваш возраст менее 13 лет, настроить cookie-файлы должен ваш законный представитель. Больше информации
Нет комментариев