Возврат функции в Python: Как использовать?
Команда return в Python: использование и лучшие практики
Предложение команды return
в языке Python является ключевым компонентом функций и методов. Вы можете использовать команду return
для возврата объектов Python обратно в код вызывающего программы. Эти объекты известны как значение возврата функции. Вы можете использовать их для дальнейших вычислений в ваших программах.
Умение использовать команду return
эффективно является основным навыком, если вы хотите писать кастомные функции, которые соответствуют принципам Python и являются надежными.
В этом учебнике вы узнаете:
- Как использовать команду
return
в ваших функциях - Как возвращать одно или несколько значений из ваших функций
- Какие лучшие практики следует соблюдать при использовании команды
return
Пройдите викторину: Проверьте свои знания с интерактивной викториной “Команда return в Python”. По ее завершении вы получите оценку, чтобы следить за своим прогрессом в учении:
Начало работы с функциями Python
Большинство языков программирования позволяют вам назначить имя кодовому блоку, который выполняет конкретное вычисление. Эти названные кодовые блоки могут быть повторно использованы, поскольку вы можете использовать их имя для вызова из различных мест в вашем коде.
Программисты называют эти именованные кодовые блоки подпрограммами, процедурами или функциями. Они обычно принимают некоторые значения в качестве параметров, выполняют некоторые вычисления и возвращают (с помощью команды return
) результат этого вычисления обратно программе, которая вызывает эту функцию.
Давайте рассмотрим простой пример функции Python:
В этом примере мы определяем функцию multiply_by_two
, которая принимает один параметр x
и возвращает его удвоенное значение. Когда мы вызываем эту функцию и передаем ей значение 5, она вернет результат 10.
В этом случае, функция multiply_by_two
выполняется и возвращает значение 10, которое сохраняется в переменной result
и выводится на экран.
Понимание команды return в Python
Команда return
используется для явного возврата значения из функции. Она указывает на то, что функция завершила свое выполнение и возвращает определенный объект. В Python вы можете использовать return
сразу после вычисления значения или в любом месте функции.
Явные выражения return
Явное выражение return
позволяет вам явно указывать, какое значение функция должна возвращать. Вы можете использовать return
с вычисляемым выражением или существующей переменной внутри функции.
Например, давайте определим функцию sum_numbers
, которая принимает два числа в качестве параметров и возвращает их сумму:
Когда мы вызываем эту функцию и передаем ей числа 3 и 4, она вернет их сумму, равную 7.
В этом примере, функция sum_numbers
использует оператор +
для сложения двух чисел и возвращает результат с помощью команды return
.
Неявные выражения return
Если в функции отсутствует явное выражение return
, то она все равно вернет значение. Это происходит потому, что в Python все функции по умолчанию возвращают значение None
, если явное выражение return
не указано.
Рассмотрим следующий пример функции, которая принимает номер месяца и возвращает соответствующее ему название:
В этом примере функция get_month_name
проверяет значение переменной month
и возвращает соответствующее название месяца с помощью команды return
. Если значение month
равно 2, функция вернет строку “February”.
Если вызвать функцию get_month_name
с другим значением, например 4, она все равно вернет значение None
, поскольку нет явного выражения return
для этого значения.
В этом случае, функция get_month_name
не находит подходящих проверок для значения 4 и возвращается значение None
по умолчанию. Это может быть полезно в некоторых случаях, когда вам нужно выйти из функции без явных выражений return
.
Возвращение против печати
При выполнении функции важно знать разницу между возвращаемым значением и простым выводом в консоль. Когда функция возвращает значение с помощью команды return
, это значит, что она сохраняет это значение, а вы можете использовать его в дальнейших вычислениях или сохранить его в переменной. С другой стороны, когда функция просто выводит значение в консоль с помощью команды print
, она не сохраняет это значение и не может быть использована в других частях программы.
Давайте рассмотрим пример, чтобы проиллюстрировать эту разницу. У нас есть функция square
, которая принимает число и выводит его квадратный корень:
Здесь функция square
выводит результат умножения числа на само себя (квадрат) с помощью команды print
. Однако она не возвращает значение, а просто выводит его на экран. Если мы попытаемся сохранить этот вывод в переменную result
и вывести его на экран, мы получим значение None
, так как функция square
не возвращает никакого значения.
Чтобы функция возвращала значение, а не просто выводила его, мы можем использовать команду return
:
Теперь функция square
возвращает результат умножения числа на само себя с помощью команды return
. Мы можем сохранить этот результат в переменную result
и использовать его в дальнейших вычислениях или выводе на экран.
Возврат нескольких значений
В Python вы можете также возвращать несколько значений из функции. Для этого вы можете просто разделить значения, которые вы хотите вернуть, с помощью запятой в выражении return
. В вызывающей программе вы можете сохранить эти значения в нескольких переменных.
Рассмотрим следующий пример функции get_circle_info
, которая принимает радиус окружности и возвращает ее площадь и длину окружности:
В этом примере функция get_circle_info
вычисляет площадь и длину окружности с помощью формул. Затем она возвращает эти значения, разделяя их запятой. В вызывающей программе мы сохраняем эти значения в переменных circle_area
и circle_circumference
и выводим их на экран.
Использование команды return: лучшие практики
При использовании команды return
в Python есть несколько лучших практик, которые могут упростить ваш код и сделать его более понятным.
Явное возвращение значения None
В некоторых случаях вам может потребоваться явно указать, что функция ничего не возвращает. Обычно это делается с помощью возврата значения None
. Это позволяет программисту явно указать, что функция не возвращает какое-либо значение, и ни на что не влияет.
В этом примере функция hello_world
просто выводит фразу “Hello, World!” на экран с помощью команды print
. Затем она возвращает значение None
, чтобы явно указать, что ничего не возвращает.
Запоминание возвращаемого значения
Когда вы вызываете функцию и она возвращает значение, полезно сохранить это значение в переменной, чтобы вы могли использовать его позже в коде. Это делает код более читабельным и облегчает понимание того, какие значения return были использованы.
В этом примере функция multiply_by_two
возвращает удвоенное значение своего аргумента x
. Мы сохраняем это значение в переменной result
и выводим его на экран. Таким образом, можно ясно видеть, что функция вернула значение 10, и мы используем его в дальнейших вычислениях или выводе.
Избегание сложных выражений
При использовании команды return
рекомендуется избегать сложных выражений, которые могут усложнить ваш код и снизить его читабельность. Вместо этого лучше разбивать сложные выражения на отдельные строки и использовать промежуточные переменные для ясности кода.
В этом примере функция calculate_sum
вычисляет значение, которое является результатом сложного выражения. В “плохом” варианте выражение слишком сложно и трудно читаемо. В “хорошем” варианте вычисления разбиты на несколько шагов, используются промежуточные переменные для ясности кода.
Возвращение значений против изменения глобальных переменных
Когда вы пишете функции, важно решить, возвращать значения или изменять глобальные переменные. В общем случае рекомендуется возвращать значения через команду return
, а не изменять глобальные переменные внутри функции. Это делает ваш код более понятным и предсказуемым в долгосрочной перспективе.
В “плохом” варианте функция add_to_result
изменяет глобальную переменную result
, что может сделать код трудночитаемым, особенно в больших и сложных программах. В “хорошем” варианте функция add
принимает два значения и возвращает их сумму с помощью команды return
, что делает код более понятным и предсказуемым.
Использование return с условиями
Команда return
может быть использована с условиями для клиентского кода. В Python вы можете использовать команду return
в разных частях функции, включая циклы и условия. Например, вы можете использовать return
при выполнении определенного условия, чтобы прекратить выполнение функции:
В этом примере функция is_positive
проверяет, что число x
положительное, и возвращает значение True
. Если число отрицательное или ноль, функция вернет значение False
. Использование return
с условиями позволяет ясно указать, что функция выполнена и что она вернула.
Оптимизация циклов
Когда вы используете команду return
внутри цикла, вы можете срезать его выполнение, если условие выполнено. Это называется ленивой или краткой оценкой. Вместо выполнения полного цикла код прекращает выполнение и возвращает значение, предотвращая дополнительные вычисления.
В этом примере функция find_positive
проверяет элементы списка numbers
и возвращает первое положительное число. Если в списке нет положительных чисел, функция возвращает значение None
. Использование команды return
внутри цикла позволяет остановить его выполнение, как только выполнено условие, что позволяет сэкономить вычислительные ресурсы.
Распознавание мертвого кода
Мертвый код - это участок кода, который никогда не будет выполнен из-за логической ошибки или неверного условия. Когда вы используете команду return
внутри условия или цикла, это помогает распознать мертвый код и устранить его.
В этом примере функция calculate_discount
вычисляет скидку для общей суммы покупки. Если общая сумма больше или равна 100, функция возвращает 10% от этой суммы. Если общая сумма больше или равна 50, функция возвращает 5% от нее. В противном случае, функция просто возвращает исходную сумму. Отладочная инструкция print
, которая находится после команды return
, никогда не будет выполнена, так как функция завершает свое выполнение при использовании команды return
.
Возвращение нескольких именованных объектов
В Python у вас есть возможность возвращать несколько значений с помощью именованных объектов. Вы можете использовать словарь или кортеж для хранения этих объектов и возвратить этот словарь или кортеж с помощью команды return
.
В этом примере функция get_user_info
определяет именованные объекты name
, age
и country
. Затем она создает словарь, который содержит эти объекты, и возвращает его с помощью команды return
. Можно использовать этот словарь в вызывающей программе для доступа к значениям по именам.
Возвращение функций: замыкания
В Python вы можете также возвращать функции из других функций. Это называется замыканием. Замыкание - это функция, которая запоминает окружающий ее контекст, включая все доступные переменные, в которых она была определена.
В этом примере функция outer_function
принимает сообщение в качестве аргумента и возвращает внутреннюю функцию inner_function
. Когда мы вызываем outer_function
и сохраняем возвращаемую функцию в переменную my_function
, мы создаем замыкание. При вызове my_function
мы видим, что она запоминает сообщение, переданное в outer_function
, и выводит его на экран.
Принятие и возвращение функций: декораторы
В Python вам также доступны возможности принимать и возвращать функции с помощью других функций. Это открывает дверь к мощным концепциям, называемым декораторами.
Декоратор - это функция, которая принимает другую функцию в качестве аргумента, дополняет ее функциональность и возвращает новую функцию. Он позволяет изменить поведение функции без изменения ее исходного кода.
В этом примере мы определяем декоратор decorator_function
, который принимает другую функцию в качестве аргумента и создает внутреннюю функцию wrapper_function
. Внутренняя функция выполняет какие-то действия перед и после вызова исходной функции original_function
. Затем мы применяем декоратор к функции target_function
с помощью символа @
, чтобы изменить ее поведение.
Возвращение пользовательских объектов: паттерн Фабрика
В Python вы также можете возвращать пользовательские объекты из функций. Один из популярных паттернов возвращения пользовательских объектов называется паттерн Фабрика. В этом паттерне функция выступает в качестве фабрики, которая создает и возвращает объекты определенного класса.
В этом примере функция create_rectangle
принимает значения ширины и высоты и создает новый объект класса Rectangle
. Этот новый прямоугольник возвращается функцией и может быть использован в вызывающей программе.
Использование return в блоках try…finally
Команда return
может быть использована в блоках try...finally
для выполнения кода независимо от того, вернула функция значение или нет. Блок finally
позволяет выполнять код, который должен быть выполнен в любом случае, независимо от исключений или ошибок.
В этом примере функция divide
делит число x
на число y
с помощью оператора /
. Результат деления сохраняется в переменной result
и возвращается с помощью команды return
. Блок finally
включает инструкцию print
, чтобы сообщить о завершении деления.
Использование return в генераторных функциях
Команда return
может также использоваться в генераторных функциях для остановки генерации значений и завершения итерации. Обычно генераторные функции используют команду yield
для возврата значений по одному на итерацию. Однако вы можете использовать команду return
для преждевременного завершения итерации.
В этом примере генераторная функция countdown
принимает значение n
и возвращает числа от n
до 1 с помощью команды yield
. Когда n
становится равным 0, функция использует команду return
, чтобы завершить итерацию и вернуть строку “Countdown is finished”. В цикле for
мы можем использовать генератор для печати чисел от 5 до 1. Когда итерация генератора заканчивается, возникает исключение StopIteration
, в котором есть информация о причине завершения итерации.
Заключение
В Python команда return
играет важную роль в функциях, позволяя возвращать значения обратно вызывающему коду. Вы можете использовать команду return
для возврата одного или нескольких значений из функций, а также для возвращения функций, объектов и выполнения других полезных операций. При использовании команды return
рекомендуется придерживаться лучших практик, чтобы сделать ваш код более читаемым, поддерживаемым и эффективным.