What is the formal difference between "print" and "return"? [duplicate]
В чем формальная разница между "print" и "return"?
Допустим, я определяю простую функцию, которая будет отображать переданное ей целое число:
deffunct1(param1): print(param1) return(param1)
выходные данные будут такими же, но я знаю, что когда в функции используется оператор return, выходные данные можно использовать снова. В противном случае значение оператора print не может быть использовано. Но я знаю, что это не формальное определение, кто-нибудь может дать мне хорошее определение?
Переведено автоматически
Ответ 1
Совершенно разные вещи. Представьте, что у меня есть эта программа на python:
#!/usr/bin/env python
defprintAndReturnNothing(): x = "hello" print(x)
defprintAndReturn(): x = "hello" print(x) return x
defmain(): ret = printAndReturn() other = printAndReturnNothing()
print("ret is: %s" % ret) print("other is: %s" % other)
if __name__ == "__main__": main()
Каким вы ожидаете быть результатом?
hello hello ret is : hello other is: None
Почему?
Почему? Потому что print принимает его аргументы / выражения и выводит их в стандартный вывод, поэтому в функциях, которые я создал, print будет выводить значение x, которое является hello.
printAndReturn вернет x вызывающему методу, поэтому:
ret = printAndReturn()
ret будет иметь то же значение, что и x, т.е. "hello"
printAndReturnNothing ничего не возвращает, поэтому:
other = printAndReturnNothing()
other на самом деле становится None, потому что это возврат по умолчанию из функции python. Функции Python всегда что-то возвращают, но если не объявлено return, функция вернет None.
Этот пример, как обычно, демонстрирует некоторые новые возможности Python:
Оператор return возвращает значение из функции. return без аргумента выражения возвращает None . Завершение функции также возвращает None.
Ответ 2
С помощью print() вы выведете на стандартный вывод значение param1, в то время как с помощью return вы отправите param1 вызывающему.
Эти два оператора имеют совершенно разное значение, и вы не должны видеть одинаковое поведение. Опубликуйте всю вашу программу, и вам будет легче указать на разницу.
Редактировать: как указывали другие, если вы находитесь в интерактивной оболочке python, вы видите тот же эффект (печатается значение), но это происходит потому, что оболочка вычисляет выражения и печатает их выходные данные.
В этом случае функция с return оператором вычисляется как параметр return самой себя, поэтому возвращаемое значение передается обратно. Не позволяйте интерактивной оболочке обмануть вас! :)
Ответ 3
Простой пример, показывающий разницу:
deffoo(): print (5)
defbar(): return7
x = foo() y = bar()
print (x) # will show "None" because foo() does not return a value print (y) # will show "7" because "7" was output from the bar() function by the return statement.
Ответ 4
Я начну с базового объяснения. print просто показывает пользователю-человеку строку, представляющую то, что происходит внутри компьютера. Компьютер не может использовать эту печать. return - это способ, которым функция возвращает значение. Это значение часто невидимо пользователю-человеку, но оно может использоваться компьютером в дальнейших функциях.
В более широком смысле, print никоим образом не повлияет на функцию. Это просто для удобства пользователя. Это очень полезно для понимания того, как работает программа, и может использоваться при отладке для проверки различных значений в программе без прерывания работы программы.
return - это основной способ, которым функция возвращает значение. Все функции будут возвращать значение, и если нет оператора return (или yield, но пока не беспокойтесь об этом), он вернет None . Значение, возвращаемое функцией, затем может быть дополнительно использовано в качестве аргумента, переданного другой функции, сохранено как переменная или просто напечатано в интересах пользователя-человека.
Рассмотрим эти две программы:
deffunction_that_prints(): print"I printed"
deffunction_that_returns(): return"I returned"
f1 = function_that_prints() f2 = function_that_returns() print"Now let us see what the values of f1 and f2 are" print f1 print f2