Функции могут быть использованы для передачи данных из своего тела обратно в основную часть программы. Это называется возвращением значения функции. В большинстве языков программирования, включая Python, для выхода из функции и передачи данных используется оператор return.
Когда интерпретатор Python встречает команду return при выполнении функции, он забирает указанное значение и завершает выполнение функции.
def cylinder(): r = float(input()) h = float(input()) # Вычисление площади боковой поверхности цилиндра: side = 2 * 3.14 * r * h # Вычисление площади основания цилиндра: circle = 3.14 * r**2 # Полная площадь цилиндра: full = side + 2 * circle return full square = cylinder() print(square)
Пример выполнения:
3 7 188.4
В этой программе функция возвращает значение переменной full. Самая переменная не возвращается, только ее значение, которое представляет собой площадь цилиндра.
После возвращения значение присваивается переменной square в основной программе. Процесс происходит следующим образом:
- Вызывается функция cylinder().
- Возвращается некоторое значение.
- Возвращённое значение присваивается переменной square.
Можно не присваивать результат переменной, а непосредственно вывести его:
... print(cylinder())
Здесь результат функции cylinder() сразу передается в print(). Если просто вызвать cylinder() без использования полученных данных, они потеряются, но это не вызовет синтаксическую ошибку.
В одной функции может быть несколько операторов return. Однако выполнится только тот, до которого первым дойдет выполнение программы. Например, если вы хотите обработать исключение, возникающее из-за неверного ввода, можно сделать так, чтобы в случае исключения функция завершала свое выполнение без вычислений:
def cylinder(): try: r = float(input()) h = float(input()) except ValueError: return side = 2 * 3.14 * r * h circle = 3.14 * r**2 full = side + 2 * circle return full print(cylinder())
Если вместо числа ввести буквы, сработает return в except, и функция завершится, пропуская все последующие вычисления, включая return full. Пример:
r None
Но что такое None, появившийся из-за "пустого" return? Это объект типа NoneType, представляющий "ничто". Мы знали об int, float, str, bool, но теперь пришло время пятого типа данных.
Return без указания значения возвращает None по умолчанию, однако вы также можете явно написать return None.
Более того, есть функции, в которых нет явного return, но они всё равно что-то возвращают, даже если это None. В Python любая функция возвращает значение: если нет оператора return, она возвращает None.
Возврат нескольких значений
В Python функция может возвращать несколько значений, указав их через запятую после оператора return:
def cylinder(): r = float(input()) h = float(input()) side = 2 * 3.14 * r * h circle = 3.14 * r**2 full = side + 2 * circle return side, full sCyl, fCyl = cylinder() print("Площадь боковой поверхности %.2f" % sCyl) print("Полная площадь %.2f" % fCyl)
Функция cylinder() возвращает два значения. Первое присваивается sCyl, второе - fCyl. Такое присваивание уникально для Python и часто не встречается в других языках:
>>> a, b, c = 10, 15, 19 >>> a 10 >>> b 15 >>> c 19
Перечисление значений через запятую (10, 15, 19) формирует объект типа tuple, который по-русски называется "кортеж". Это вид структуры данных, который будет изучаться позже.
Когда кортеж присваивается нескольким переменным, его элементы распределяются между ними, это называется распаковка.
Когда функция возвращает несколько значений, фактически она возвращает один объект типа tuple. Перед возвратом значения упаковываются в кортеж. Если же возвращается только одно значение, его тип остаётся прежним.
Распаковка – процесс необязательный. Можно просто сделать так:
… print(cylinder())
Пример выполнения:
4 3 (75.36, 175.84)
Кортеж показывается на экране с помощью круглых скобок. Его можно присвоить одной переменной и вывести её значение на экран позже.
Практическая работа
- Создайте программу с функцией, которая принимает две строки на входе и возвращает их объединение. Покажите результат.
- Напишите функцию, которая получает числа с клавиатуры и умножает их до введения 0. Затем верните итоговое произведение и покажите его.