print() и return - это очень разные вещи, и все программисты рано или поздно узнают. И тем не менее, вы постоянно слышите один и тот же вопрос, который снова и снова задают начинающие программисты:

В чем разница между print() и return?

Ответы на этот вопрос часто дают базовые определения этих двух вещей, и более опытные программисты часто встречают недоверие к тому, что эти две вещи можно перепутать. Я дам их базовое определение, подходящее для новичков, но я также попытаюсь ответить на вопрос, который я никогда не видел, чтобы опытные программисты решали — почему они вообще были перепутаны?

Определения print() и return для начинающих

Вот основные определения print() и return ниже. Я понимаю, что эти определения не удовлетворят более продвинутых программистов, но пока давайте будем проще:

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

Это две разные вещи, верно? Итак…

Почему путаница?

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

Новички часто начинают с print(). Итак, когда они пишут функцию и вызывают ее, это будет примерно так:

def add(num1, num2):
    print(num1 + num2)

>>> add(1, 2)
3

Затем они изучают return и включают это в свою работу. Но им все равно нужно распечатать то, что они вернули, поэтому вместо этого код выглядит примерно так:

def add(num1, num2):
    return num1 + num2
>>> print(add(1, 2))
3

Запуск обеих версий кода дает одинаковый результат — 3.

И в этом проблема — потому что начинающий программист видит второй пример и задается вопросом, зачем вообще нужно было добавлять return. В конце концов, первая версия кода выглядела проще при прямом использовании print() и давала точно такой же ответ — так зачем использовать return ? Что он сюда добавляет?

Рассеивание тумана

Единственный способ действительно продемонстрировать разницу — использовать более одного вызова функции, например:

def add(num1, num2):
    return num1 + num2
>>> num3 = add(1, 2)
>>> num4 = add(num3, 3)
>>> print(num4)
6

Здесь мы вызываем add() один раз, чтобы сложить 1 и 2 вместе. return возвращает значение this, 3, обратно в переменную. Затем эта переменная снова передается в функцию add(), чтобы добавить к ней 3. Затем распечатывается окончательный ответ 6.

И вот где действительно проявляется разница между return и print(). Потому что вам нужно использовать return для сохранения промежуточного значения в переменной, которая затем будет передана обратно в add() . Заменить return на print() по этой причине нельзя — любые попытки сделать это приводят к исключению (и бардаку).

Более глубокая правда

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

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