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()
по этой причине нельзя — любые попытки сделать это приводят к исключению (и бардаку).
Более глубокая правда
Итак, это, очевидно, простая проблема, хотя я надеюсь, что любой начинающий программист, читающий это, поможет понять разницу между ними.
Но для продвинутых программистов я считаю, что в этом есть более глубокая правда, имеющая отношение к тому, когда мы пытаемся помочь новичкам. Когда новичок спрашивает о проблеме, мы не должны просто принимать вопрос за чистую монету и давать правильный, но, возможно, неполный ответ. Скорее, мы должны подумать о том, почему этот человек изо всех сил пытался понять то, о чем он спрашивал, в первую очередь, и адаптировать наши ответы таким образом.