Статья Автор: Александр Ф. Алейников

13.4.1 Функции с возвратом значения. Часть 1

Тема урока: функции с возвратом значения

  1. Функции с возвратом значения
  2. Решение задач

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

Функция с возвратом значения

Функция с возвратом значения похожа на функцию без возврата значения тем, что:

  • это набор инструкций, выполняющий определенную задачу;
  • когда нужно выполнить функцию, ее вызывают.

Однако, когда функция с возвратом значения завершается, она возвращает значение в ту часть программы, которая ее вызвала. Возвращаемое из функции значение используется как любое другое: оно может быть присвоено переменной, выведено на экран, использовано в математическом выражении (если это число) и т. д. 

Мы уже сталкивались со многими функциями с возвратом значений:

  • функция int() – преобразует строку к целому числу и возвращает его;
  • функция float() – преобразует строку к вещественному числу и возвращает его;
  • функция range() – возвращает последовательность целых чисел 0, 1, 2, ...;
  • функция abs() – возвращает абсолютное значение числа (модуль числа);
  • функция len() – возвращает длину строки или списка.

Функцию с возвратом значения пишут точно так же, как и без, но она должна иметь инструкцию return.

Вот общий формат определения функции с возвратом значения в Python:

def название_функции():
    блок кода
    return выражение

В функции должна быть инструкция return, принимающая форму:

return выражение

Значение выражения, которое следует за ключевым словом return, будет отправлено в ту часть программы, которая вызвала функцию. Это может быть переменная либо выражение, к примеру, математическое.

Функция с возвратом значения содержит инструкцию return, возвращающую значение в ту часть программы, которая ее вызвала.

При изучении вещественных чисел мы решали задачу о переводе градусов по шкале Фаренгейта в градусы по шкале Цельсия по формуле C=59(F 32).

Напишем функцию, которая осуществляет перевод: 

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 – хорошее название для переменной, значение которой возвращается из функции. 

Печать