Параметры и return в Python: как функция возвращает ответ
Автор: Казачкин Даниил Михайлович · Обновлено
Параметры — локальные имена входных данных функции. Команда return завершает текущий вызов и передаёт значение в место вызова. Возвращённый результат можно сохранить, сравнить, использовать в выражении или передать другой функции.
Вычисление без печати внутри
def rectangle_area(width, height):
return width * height
first = rectangle_area(3, 5)
second = rectangle_area(2, 8)
print(first + second)Ожидаемый вывод:
31Первый вызов возвращает 15, второй 16, а сложение выполняется уже с двумя результатами. Функция не решает, как показывать ответ пользователю, поэтому её удобно повторно использовать.
Код после return не выполняется
Как только интерпретатор встречает return, вызов заканчивается. Строка под безусловным return недостижима. Несколько return полезны в разных ветках, если каждая явно описывает свой исход.
Если return отсутствует, Python возвращает None. Типичная ошибка — написать print вместо return, увидеть число в консоли и затем получить TypeError при арифметике с None. Другая ошибка — перепутать порядок позиционных аргументов. Именованные аргументы rectangle_area(height=5, width=3) делают смысл явным.
Функция для границы
Напишите is_even(number), возвращающую логическое значение, и max_of_two(left, right), возвращающую большее число без встроенного max. Проверьте чётные, нечётные и отрицательные значения, а для максимума — равные числа. Не печатайте внутри функций; сформируйте сообщения снаружи. Затем временно удалите return и проследите, какое значение попало в переменную.
Возврат составного результата
Напишите функцию divmod_manual(a, b), которая возвращает частное и остаток как кортеж. Снаружи распакуйте два значения и проверьте свойство a == quotient * b + remainder. Для b == 0 выберите явное поведение: позволить ZeroDivisionError или заранее выбросить ValueError с понятным текстом. Не печатайте ответ внутри функции. Затем создайте вариант, возвращающий словарь с подписанными полями, и сравните удобство вызова. Упражнение показывает, что return может передавать не только одно простое число, а целую структурированную запись результата.
Практикум: явный контракт возвращаемого значения
Создайте функцию поиска первого положительного числа. Решите, что возвращать при отсутствии: None, индекс -1 или само значение; не смешивайте варианты. Проверьте положительный элемент в начале и конце, ноль, только отрицательные и пустой список. В вызывающем коде отличайте None через is None, потому что найденное значение может быть ложноподобным в другой задаче. Затем измените контракт на возврат индекса и перечислите, какие строки пользователя должны измениться.
Контрольная точка
Почему return внутри цикла может завершить функцию слишком рано? Покажите ошибочную версию, которая объявляет отсутствие после первого неподходящего элемента, и тест, выявляющий дефект.
Частые вопросы
Можно ли вернуть из функции несколько значений?
Да, запись через запятую фактически возвращает кортеж, который можно распаковать. Но форма результата должна быть стабильной: не возвращайте в разных ветках то число, то строку без явной причины.