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. Для соседних задач пригодятся эти разборы:
- function_name в Python: как ввести имя через input() и передать его в функцию
- Как запустить функцию в Python: вызов, аргументы и типичные ошибки новичков
- Как узнать версию Python в терминале, VS Code и внутри программы
- Циклы и условные операторы в Python: как управлять потоком выполнения программы