Какова цель оператора return? Чем он отличается от печати?
Что делает оператор return
? Как его следует использовать в Python?
Чем return
отличается от print
?
Смотрите также
Часто люди пытаются использовать print
в цикле внутри функции, чтобы видеть несколько значений, и хотят иметь возможность использовать результаты извне. Их нужно вернуть, но return
функция завершает работу при первом запуске. Смотрите, Как я могу использовать `return`, чтобы вернуть несколько значений из цикла? Могу ли я поместить их в список?.
Часто новички пишут функцию, которая в конечном итоге print
выдает что-то, а не return
вводит это, а затем также пытаются получить print
результат, что приводит к неожиданному None
результату. Смотрите, почему после вывода моей функции выводится "None"?.
Иногда в 3.x люди пытаются присвоить результат print
имени или использовать его в другом выражении, например input(print('prompt:'))
. В 3.x, print
это функция, так что это не синтаксическая ошибка, но она возвращает None
то, что было отображено. Смотрите, почему функция print возвращает None?.
Иногда люди пишут код, который пытается получить print
результат рекурсивного вызова, вместо того, чтобы return
обрабатывать его должным образом. Точно так же, как если бы функция была просто вызвана, это не работает для передачи значения обратно посредством рекурсии. Смотрите, Почему моя рекурсивная функция возвращает None?.
Подумайте, как мне получить результат (output) из функции? Как я могу использовать результат позже? для вопросов, которые просто касаются того, как использовать return
, без рассмотрения print
.
Переведено автоматически
Ответ 1
print()
Функция записывает, то есть "печатает", строку в консоли. Оператор return
завершает работу вашей функции и возвращает значение вызывающему ее объекту. Смысл функций в целом заключается в приеме входных данных и возврате чего-либо. Оператор return
используется, когда функция готова вернуть значение своему вызывающему объекту.
Например, вот функция, использующая оба print()
и return
:
def foo():
print("hello from inside of foo")
return 1
Теперь вы можете запускать код, вызывающий foo, например:
if __name__ == '__main__':
print("going to call foo")
x = foo()
print("called foo")
print("foo returned " + str(x))
Если вы запустите это как скрипт (например, .py
файл), а не в интерпретаторе Python, вы получите следующий результат:
going to call foo
hello from inside foo
called foo
foo returned 1
Надеюсь, это прояснит ситуацию. Интерпретатор записывает возвращаемые значения в консоль, чтобы я мог понять, почему кто-то может быть сбит с толку.
Вот еще один пример из интерпретатора, который демонстрирует, что:
>>> def foo():
... print("hello within foo")
... return 1
...
>>> foo()
hello within foo
1
>>> def bar():
... return 10 * foo()
...
>>> bar()
hello within foo
10
Вы можете видеть, что когда foo()
вызывается из bar()
, 1 не записывается в консоль. Вместо этого он используется для вычисления значения, возвращаемого из bar()
.
print()
это функция, которая вызывает побочный эффект (она записывает строку в консоль), но выполнение возобновляется со следующим оператором. return
заставляет функцию прекратить выполнение и передать значение обратно тому, кто ее вызвал.
Ответ 2
Считайте, что оператор print вызывает побочный эффект, он заставляет вашу функцию записывать некоторый текст пользователю, но он не может быть использован другой функцией.
Я попытаюсь лучше объяснить это на нескольких примерах и паре определений из Википедии.
Вот определение функции из Википедии
Функция в математике связывает одну величину, аргумент функции, также известный как input , с другой величиной, значением функции, также известным как output ..
Задумайтесь об этом на секунду. Что это значит, когда вы говорите, что функция имеет значение?
Это означает, что вы действительно можете заменить значение функции обычным значением! (Предполагая, что эти два значения имеют одинаковый тип значения)
Почему вы хотите, чтобы вы спросили?
Как насчет других функций, которые могут принимать тот же тип значения в качестве входных данных?
def square(n):
return n * n
def add_one(n):
return n + 1
print square(12)
# square(12) is the same as writing 144
print add_one(square(12))
print add_one(144)
#These both have the same output
Есть необычный математический термин для функций, которые зависят только от своих входных данных для получения своих выходных данных: ссылочная прозрачность. Опять же, определение из Википедии .
Ссылочная прозрачность и ссылочная непрозрачность являются свойствами частей компьютерных программ. Выражение называется ссылочно прозрачным, если его можно заменить его значением без изменения поведения программы.
Может быть немного сложно понять, что это значит, если вы просто новичок в программировании, но я думаю, вы поймете это после некоторых экспериментов. В общем, вы можете выполнять такие вещи, как print в функции, и у вас также может быть оператор return в конце.
Просто помните, что когда вы используете return, вы в основном говорите "Вызов этой функции совпадает с записью возвращаемого значения".
Python фактически вставит возвращаемое значение для вас, если вы откажетесь ввести свое собственное, оно называется "None" , и это особый тип, который просто ничего не означает, или null .
Ответ 3
Я думаю, что словарь - это ваша лучшая ссылка здесь
Вкратце:
возвращает что-либо return или отвечает вызывающей функции, в то время как print выдает текст
Ответ 4
В python мы начинаем определение функции с def
, и обычно - но не обязательно - заканчиваем функцию с return
.
Предположим, нам нужна функция, которая добавляет 2
к входному значению x
. В математике мы могли бы написать что-то вроде f(x) = x + 2
, описывающее эту взаимосвязь: значение функции, вычисляемое в x
, равно x + 2
.
В Python это выглядит следующим образом:
def f(x):
return x + 2
То есть: мы def
вводим функцию с именем f
, которой будет присвоено x
значение. При выполнении кода мы вычисляем x + 2
, и return
это значение. Вместо описания взаимосвязи мы описываем шаги, которые необходимо предпринять для вычисления результата.
После определения функции ее можно вызывать с любым аргументом, который вам нравится. Ему не обязательно указывать имя x
в вызывающем коде, и это даже не обязательно должна быть переменная:
print f(2)
>>> 4
Мы могли бы написать код для функции некоторыми другими способами. Например:
def f(x):
y = x + 2
return y
или даже
def f(x):
x = x + 2
return x
Опять же, мы выполняем шаги по порядку - x = x + 2
изменяем то, на что x
ссылается (теперь это означает результат из суммы), и это то, что return
редактируется return x
(потому что это значение * в момент, когда return
происходит).