Формирование результата функции в Python

Раздел: Основы Python -> Функции

Возвращаемое значение из функции

В Python каждая функция после выполнения возвращает объект. Если в коде функции нет оператора return, возвращается None. Оператор return определяет, какой именно объект окажется результатом вызова.

Как вернуть одно значение из функции?

Основной способ возврата значения, оператор return с выражением. Выражение вычисляется, после чего функция завершается и значение подставляется в место вызова.


def add(a, b):
    return a + b

summa = add(3, 4)
print('Сумма:', summa)

Python return value (возвращаемое значение функции в python)

Сумма: 7

возвращаемые значения python (возвращаемые значения в python)

Функция add складывает два аргумента и возвращает число 7. Результат сохраняется в переменную summa. Такой приём нужен, когда результат требуется использовать многократно или передать дальше.

Типичная ошибка, выводить результат на экран вместо возврата. print внутри функции показывает значение, но не делает его доступным вызывающему коду. Если после вызова функции попытаться записать результат в переменную, там окажется None.


def wrong_add(a, b):
    print(a + b)

result = wrong_add(3, 4)
print(result)

вызов функции в python (вызов функции в python)

7
None

Python имена функций (имена функций в python)

Решение: использовать return вместо print для передачи значения из функции.

Как вернуть несколько значений одной функцией?

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


def min_max(numbers):
    return min(numbers), max(numbers)

low, high = min_max([4, 1, 9, 7])
print('Минимум:', low, 'Максимум:', high)

Def name python (определение функции name в python)

Минимум: 1 Максимум: 9

аргументы print python (аргументы функции print в python)

Возвращённый кортеж (1, 9) сразу распаковывается в переменные low и high. Такой подход применяется для передачи нескольких итоговых значений, например координат, статистики, границ диапазона.

Если возвращённый кортеж не распаковывать, он сохраняется в одной переменной. К элементу кортежа придётся обращаться по индексу, что менее наглядно.


pair = min_max([5, 2, 8])
print(pair)
print(pair[0], pair[1])

аргумент метода python (аргументы метода python)

(2, 8)
2 8

Python args (аргументы в python)

Как остановить выполнение функции при ошибке?

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


def safe_divide(a, b):
    if b == 0:
        return
    return a / b

print('Результат:', safe_divide(10, 2))
print('Результат:', safe_divide(10, 0))

именованные аргументы python (именованные аргументы python)

Результат: 5.0
Результат: None

Python функция аргумент список (список как аргумент функции python)

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

Цель такого варианта, защитить функцию от недопустимых входных данных. При этом важно, что None становится индикатором «нет результата».

Иногда нужно отличить отсутствие результата от ситуации, когда результат действительно равен None. В такой функции сигналом ошибки может служить исключение, а не возврат None.


def safe_divide_with_exception(a, b):
    if b == 0:
        raise ValueError('Делитель не может быть нулём')
    return a / b

print(safe_divide_with_exception(8, 2))

Return print python (возвращаемое значение print в python)

4.0

аннотация типов функции python (аннотация типов функций в python)

Как вернуть результат, зависящий от условия?

Для короткой проверки можно применить тернарное выражение в return. Оно возвращает одно значение при истинном условии и другое при ложном.


def status(score):
    return 'зачёт' if score >= 60 else 'незачёт'

print(status(80))
print(status(40))
зачёт
незачёт

Такая форма полезна для простых функций с одним условием. Она сокращает код, но не подходит для сложной логики, где нужен отдельный if...elif...else.

Не стоит вкладывать тернарное выражение в тернарное выражение. Это делает возвращаемое значение трудным для чтения. Лучше оставить ветвление через if.


def grade(score):
    if score >= 90:
        return 'A'
    if score >= 75:
        return 'B'
    return 'C'

print(grade(85))
B

Расширенные примеры возвращаемых значений

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

Пример

def create_even_numbers(limit):
    numbers = []
    for number in range(limit + 1):
        if number % 2 == 0:
            numbers.append(number)
    return numbers

evens = create_even_numbers(10)
print(evens)
print('Количество:', len(evens))
[0, 2, 4, 6, 8, 10]
Количество: 6

Функция создаёт список чётных чисел от 0 до limit включительно. Возврат списка позволяет обработать его за пределами функции: измерить длину, отсортировать, передать другому алгоритму.

Пример

def count_letters(word):
    result = {}
    for char in word:
        if char in result:
            result[char] += 1
        else:
            result[char] = 1
    return result

counts = count_letters('banana')
print(counts)
print('Буква b:', counts.get('b'))
{'b': 1, 'a': 3, 'n': 2}
Буква b: 1

Словарь возвращается из функции как обычный объект. Внешний код использует метод get для безопасного доступа.

Пример

def separate(numbers):
    odd = []
    even = []
    for number in numbers:
        if number % 2 == 0:
            even.append(number)
        else:
            odd.append(number)
    return odd, even

odd_list, even_list = separate([1, 2, 3, 4, 5, 6])
print('Нечётные:', odd_list)
print('Чётные:', even_list)
Нечётные: [1, 3, 5]
Чётные: [2, 4, 6]

Это ещё один способ вернуть несколько объектов. Кортеж содержит два отдельных списка, и распаковка сохраняет их в разные переменные.

Пример

def multiplier(coefficient):
    def multiply(x):
        return x * coefficient
    return multiply

double = multiplier(2)
triple = multiplier(3)
print(double(10))
print(triple(10))
20
30

В результате вызова multiplier получается новая функция. Каждая возвращённая функция запоминает свой коэффициент. Это применяется для создания функций с уже заданными параметрами.

Пример

def find_index(collection, target):
    for i, value in enumerate(collection):
        if value == target:
            return i
    return None

print(find_index([5, 8, 3], 8))
print(find_index([5, 8, 3], 10))
1
None

Возврат None сообщает о том, что элемент не найден. В таком случае нельзя применять if not result, потому что индекс 0 тоже является ложным. Корректно сравнивать с None.

Пример

def log_and_stop(message):
    print(message)
    return

x = log_and_stop('stop')
print(x)
stop
None

Здесь return без значения применяется для завершения функции. Возвращённое значение равно None.

Пример

def careful():
    try:
        return 'from try'
    finally:
        print('finally block')

print(careful())
finally block
from try

Блок finally выполняется до того, как функция вернёт значение. Это гарантирует очистку ресурсов даже при досрочном возврате.

Если внутри finally указать return, оно переопределит возвращаемое значение из try. Поэтому нужно избегать return в finally.

Пример

def override():
    try:
        return 'first'
    finally:
        return 'second'

print(override())
second

Подобная ситуация становится источником трудно отслеживаемых ошибок. Лучше не использовать return внутри finally.

Возвращаемые значения в Python - comments

En
возвращаемые значения python (python)