Python

Как закончить функцию в Python: отступ, return, pass и выход из программы

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

def say_hello():
    print("Привет")
    print("Я внутри функции")

print("Я уже снаружи функции")

В этом примере первые две строки print() находятся внутри функции, потому что у них есть отступ. Последний print() отступа не имеет, значит он уже не входит в функцию

Короткий ответ

Функция заканчивается там, где заканчивается блок с отступом

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

print(add(2, 3))

Если функция должна отдать результат наружу, используйте return. Если результат не нужен, функция может закончиться сама, когда Python дойдет до конца ее блока

Что делает return

return завершает выполнение функции и возвращает значение туда, где функцию вызвали

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

result = add(10, 5)
print(result)

Результат

15

После return функция прекращает работу. Код ниже return внутри той же ветки уже не выполнится

def test():
    print("До return")
    return 10
    print("После return")

print(test())

Результат

До return
10

Строка После return не напечатается

Чем return отличается от print

print() просто выводит текст в консоль. return возвращает значение из функции, чтобы его можно было использовать дальше

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

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

x = add_with_print(2, 3)
y = add_with_return(2, 3)

print("x:", x)
print("y:", y)

Результат

5
x: None
y: 5

Первая функция напечатала сумму, но ничего не вернула. Поэтому в x попало None. Вторая функция вернула сумму, поэтому ее можно сохранить и использовать

Как выйти из функции раньше

return можно использовать для раннего выхода, если дальнейшие действия уже не нужны

def divide(a, b):
    if b == 0:
        return "На ноль делить нельзя"

    return a / b

print(divide(10, 2))
print(divide(10, 0))

Если b равно нулю, функция сразу возвращает сообщение и не доходит до деления

Можно ли написать return без значения

Да. Тогда функция просто завершится и вернет None

def greet(name):
    if name == "":
        return

    print("Привет,", name)

greet("")
greet("Динар")

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

Что делать с пустой функцией

Если вы пока не написали тело функции, но хотите оставить заготовку, используйте pass

def future_function():
    pass

pass ничего не делает, но позволяет коду оставаться синтаксически правильным. Без него Python выдаст ошибку, потому что после def должен быть блок кода

Как функция заканчивается в if else

Функция может иметь несколько return в разных ветках

def check_age(age):
    if age >= 18:
        return "Можно"
    else:
        return "Нельзя"

print(check_age(20))
print(check_age(15))

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

Тот же код можно записать короче

def check_age(age):
    if age >= 18:
        return "Можно"

    return "Нельзя"

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

Как завершить всю программу, а не функцию

Это другая задача. return завершает только функцию. Если нужно завершить всю программу, можно использовать sys.exit(), но в учебных задачах это нужно редко

import sys

print("До выхода")
sys.exit()
print("После выхода")

В обычном коде лучше проектировать программу так, чтобы функции возвращали результаты, а главный код решал, что делать дальше

Мини-практика

Создайте файл return_lesson.py

def get_discount(price):
    if price >= 1000:
        return price * 0.1

    return 0

price = int(input("Введите сумму покупки: "))
discount = get_discount(price)

print("Скидка:", discount)
print("К оплате:", price - discount)

Запустите программу с суммой 500 и 1500. Так вы увидите, как функция возвращает разные значения в зависимости от условия

Частые ошибки

Первая ошибка — думать, что для завершения функции нужно писать end. В Python такого слова для функций нет. Блок завершается отступом

Вторая ошибка — использовать print() вместо return, когда значение нужно дальше в программе. Если функция должна что-то посчитать, обычно она должна вернуть результат

Третья ошибка — написать код после return и ждать, что он выполнится. После выполненного return функция уже закончилась

Что почитать дальше по Python

Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x