Python: Возврат по умолчанию
Рассмотрим немного модифицированную функцию из предыдущего урока:
def sub(a, b):
# Полученный результат никак не используется
# и не возвращается наружу
answer = a - b
result = sub(10, 7)
print(result)
Этот код не содержит синтаксических ошибок, и интерпретатор выполнит его. Но на экран выведется строка None
! В функции нет return
, но несмотря на это, код отработал и в переменную result
записалось что-то.
Держитесь, мы снова повторяем мантру: вызов функции — это выражение, а выражения всегда возвращают результат своего выполнения. Значит, функция всегда возвращает что-то.
Во многих языках программирования есть специальный тип данных с единственным значением: None
(или null
, nil
— названия типа и значения в разных языках различаются). Этот тип используется в ситуациях, когда значение чего-либо не определено.
Так вот, если в функции нет инструкции return
, то интерпретатор Python автоматически возвращает None
. Поэтому в переменную result
записался None
.
Но, конечно, смысла в этой программе нет — функция сейчас не делает ничего полезного. Давайте добавим return
:
def sub(a, b):
answer = a - b
return answer
result = sub(10, 7)
print(result)
Теперь всё работает как надо.
Забыть инструкцию return
— частая ошибка новичка. Мы в обучении каждый день сталкиваемся с просьбами о помощи типа «функция правильная, но почему-то не работает». И почти всегда оказывается, что забыт return
, а результат, вместо возврата, просто печатается на экран.
Кстати, вы можете сами написать return None
в теле функции. Функция будет возвращать None
, как если бы в ней не было return
.
Вопрос для самопроверки. Что возвращает функция print()
?
Задание
Это немного странное задание, но для тренировки будет полезным. Реализуйте функцию get_none()
, не имеющую параметров и всегда возвращающую None
. Больше функция ничего делать не должна — вот такая она странная! И возвращайте None
самостоятельно, не ждите, что Python это сделает за вас — в этом и суть данной тренировки!
Вам не нужно вызывать свою функцию, только определить её.