Тема урока: функции с возвратом значения
- Функции с возвратом значения
- Решение задач
Аннотация. Функции могут не только принимать и не принимать параметры, как в примерах предыдущих уроков, но и возвращать значения. Рассмотрим этот особый тип функций – с возвратом значения.
Функция с возвратом значения
Функция с возвратом значения похожа на функцию без возврата значения тем, что:
- это набор инструкций, выполняющий определенную задачу;
- когда нужно выполнить функцию, ее вызывают.
Однако, когда функция с возвратом значения завершается, она возвращает значение в ту часть программы, которая ее вызвала. Возвращаемое из функции значение используется как любое другое: оно может быть присвоено переменной, выведено на экран, использовано в математическом выражении (если это число) и т. д.
Мы уже сталкивались со многими функциями с возвратом значений:
- функция
int() – преобразует строку к целому числу и возвращает его;
- функция
float() – преобразует строку к вещественному числу и возвращает его;
- функция
range() – возвращает последовательность целых чисел 0, 1, 2, ...;
- функция
abs() – возвращает абсолютное значение числа (модуль числа);
- функция
len() – возвращает длину строки или списка.
Функцию с возвратом значения пишут точно так же, как и без, но она должна иметь инструкцию return.
Вот общий формат определения функции с возвратом значения в Python:
def название_функции():
блок кода
return выражение
В функции должна быть инструкция return, принимающая форму:
return выражение
Значение выражения, которое следует за ключевым словом return, будет отправлено в ту часть программы, которая вызвала функцию. Это может быть переменная либо выражение, к примеру, математическое.
Функция с возвратом значения содержит инструкцию return, возвращающую значение в ту часть программы, которая ее вызвала.
При изучении вещественных чисел мы решали задачу о переводе градусов по шкале Фаренгейта в градусы по шкале Цельсия по формуле .
Напишем функцию, которая осуществляет перевод:
def convert_to_celsius(temp):
result = (5 / 9) * (temp - 32)
return result
Задача этой функции — принять одно число temp в качестве аргумента – количество градусов по шкале Фаренгейта, и вернуть другое — количество градусов по шкале Цельсия.
Рассмотрим ее работу. Первая инструкция в блоке функции присваивает значение (5 / 9) * (temp - 32) переменной result. Затем исполняется инструкция return, которая приводит к завершению исполнения функции и отправляет значение из переменной result, назад в ту часть программы, которая вызвала эту функцию.
def convert_to_celsius(temp):
result = (5 / 9) * (temp - 32)
return result
temp = float(input('Bвeдитe количество градусов по Фаренгейту: '))
celsius = convert_to_celsius(temp)
print(celsius)
Основная программа получает от пользователя одно число – значение в градусах Фаренгейта, и вызывает функцию, передавая значение переменной temp в качестве аргумента. Значение, которое возвращается из функции convert_to_celsius, присваивается переменной celsius.


Использование инструкции return по максимуму
Взглянем еще раз на функцию convert_to_celsius():
def convert_to_celsius(temp):
result = (5 / 9) * (temp - 32)
return result
Обратите внимание, что внутри этой функции происходят две вещи: во-первых, переменной result присваивается значение выражения (5 / 9) * (temp - 32), и во-вторых, значение переменной result возвращается из функции. Эта функция хорошо справляется с поставленной перед ней задачей, но ее можно упростить. Поскольку инструкция return возвращает значение выражения, переменную result устраняем и переписываем функцию так:
def convert_to_celsius(temp):
return (5 / 9) * (temp - 32)
Эта версия функции не сохраняет значение (5 / 9) * (temp - 32) в отдельной переменной, а сразу возвращает значение выражения с помощью инструкции return. Делает то же, что и предыдущая версия, но за один шаг.
Использование нескольких return
В одной функции может быть сколько угодно инструкций return. Рассмотрим функцию convert_grade(), которая переводит стобалльную оценку в пятибалльную:
def convert_grade(grade):
if grade >= 90:
return 5
elif grade >= 80:
return 4
elif grade >= 70:
return 3
elif grade >= 60:
return 2
else:
return 1
grade = int(input('Введите вашу отметку по 100-балльной системе: '))
print(convert_grade(grade))
В функции convert_grade() используется 5 инструкций return. Каждая из них возвращает соответствующее значение и завершает работу функции.
Функцию convert_grade() можно переписать с помощью одной инструкции return:
def convert_grade(grade):
if grade >= 90:
result = 5
elif grade >= 80:
result = 4
elif grade >= 70:
result = 3
elif grade >= 60:
result = 2
else:
result = 1
return result
Обратите внимание: если в функции будет несколько инструкций return, то сработает только самая первая из них, после чего функция завершит работу.
Приведённый ниже код:
def get_grade():
return 10
return 20
print(get_grade())
выводит:
10
Примечания
Примечание 1. Функции с возвратом значения предоставляют те же преимущества, что функции без возврата значения:
- упрощают программный код;
- уменьшают дублирование кода;
- упрощают тестирование кода;
- увеличивают скорость разработки;
- способствуют работе в команде.
Примечание 2. Графическая интерпретация работы функции с возвратом значения:

Примечание 3. Обратите внимание: если мы явно не указываем в функции, какое значение нужно вернуть, то по умолчанию будет возвращено значение None.
Приведённый ниже код:
def get_middle_number(a, b, c):
mx = max(a, b, c)
mn = min(a, b, c)
mid = a + b + c - mx - mn
print(get_middle_number(4, 7, 2))
выводит:
None
Примечание 4. result – хорошее название для переменной, значение которой возвращается из функции.