Каково формальное различие между "печатью" и "возвратом"?
Предположим, что я определяю простую функцию, которая отображает переданное ему целое число:
def funct1(param1):
print(param1)
return(param1)
вывод будет таким же, но я знаю, что когда в функции используется оператор return
, вывод может быть использован снова. В противном случае значение оператора print
не может быть использовано. Но я знаю, что это не формальное определение. Может ли кто-нибудь предоставить мне хорошее определение?
Ответы
Ответ 1
Значительно разные вещи. Представьте, если у меня есть эта программа python:
#!/usr/bin/env python
def printAndReturnNothing():
x = "hello"
print(x)
def printAndReturn():
x = "hello"
print(x)
return x
def main():
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
.
ret
будет иметь то же значение, что и x
, т.е. "hello"
other
фактически становится None
, потому что это возврат по умолчанию из функции python. Функции Python всегда возвращают что-то, но если не объявлено return
, функция вернет None
.
Ресурсы
Пройдя через учебник python, вы познакомитесь с этими понятиями: http://docs.python.org/tutorial
Здесь что-то о функциях формирует учебник python: http://docs.python.org/tutorial/controlflow.html#defining-functions
В этом примере, как обычно, демонстрируются некоторые новые функции Python:
Возвращаемый оператор возвращает значение из функции. return без аргумента выражения возвращает None. Падение конца функции также возвращает None.
Ответ 2
С print()
вы выведете на стандартный вывод значение param1
, а при return
вы отправите param1
вызывающему.
Оба утверждения имеют совсем другое значение, и вы не должны видеть то же поведение. Отправьте всю свою программу, и вам будет легче указать на эту разницу.
Изменить:, как указано другими, если вы находитесь в интерактивной оболочке python, вы видите тот же эффект (значение напечатано), но это происходит потому, что оболочка оценивает выражения и выводит их вывод.
В этом случае функция с оператором return
оценивается как параметр самого return
, поэтому возвращаемое значение возвращается обратно. Не позволяйте интерактивной оболочке дурачить вас!:)
Ответ 3
Простой пример, чтобы показать разницу:
def foo():
print (5)
def bar():
return 7
x = foo()
y = bar()
print (x)
# will equal "None" because foo() does not return a value
print (y)
# will equal "7" because "7" was output from the bar() function by the return statement.
Ответ 4
print
(или print()
, если вы используете Python 3) делает именно это: распечатывайте все, что следует за ключевым словом. Он также будет делать приятные вещи, такие как автоматическое объединение нескольких значений с пространством:
print 1, '2', 'three'
# 1 2 three
В противном случае print
(print()
) ничего не сделает с вашей программной точки зрения. Это никак не повлияет на поток управления, и выполнение возобновится с самой следующей инструкцией в вашем кодовом блоке:
def foo():
print 'hello'
print 'again'
print 'and again'
С другой стороны, return
(not return()
) предназначен для немедленного разрыва потока управления и выхода из текущей функции и возврата указанного значения вызывающему абоненту, который вызвал вашу функцию. Он всегда будет делать это и только это. Сам return
не заставит ничего печатать на экране. Даже если вы не укажете возвращаемое значение, возвращается неявный None
. Если вы пропустите return
вообще, неявный return None
будет по-прежнему выполняться в конце вашей функции:
def foo(y):
print 'hello'
return y + 1
print 'this place in code will never get reached :('
print foo(5)
# hello
# 6
def bar():
return # implicit return None
print bar() is None
# True
def baz(y):
x = y * 2
# implicit return None
z = baz()
print z is None
# True
Причина, по которой вы видите return
ed значения, напечатанные на экране, состоит в том, что вы, вероятно, работаете в интерактивной оболочке Python, которая автоматически print
дает результат для вашего удобства.
Ответ 5
В интерактивном терминале вывод будет одинаков. При выполнении вашей программы обычно результаты будут совершенно разными.
Я бы предложил вам прочитать книгу о Python или прочитать учебное пособие, в котором рассказывается об основных принципах, потому что это очень простая вещь.
Ответ 6
Я начну с основного объяснения. Печать просто показывает пользователю пользователя строку, представляющую, что происходит внутри компьютера. Компьютер не может использовать эту печать. return - как функция возвращает значение. Пользовательский пользователь часто не видит этого значения, но его можно использовать компьютером в следующих функциях.
В более обширной заметке print никак не повлияет на функцию. Это просто для пользы человека. Это очень полезно для понимания того, как работает программа и может использоваться при отладке для проверки различных значений в программе без прерывания программы.
return - это основной способ, с помощью которого функция возвращает значение. Все функции будут возвращать значение, а если нет оператора возврата (или уступить, но пока не волнуйтесь об этом), он будет возвращать Нет. Значение, возвращаемое функцией, может затем быть использовано в качестве аргумента, переданного другой функции, сохраненной в виде переменной или просто напечатанной в интересах пользователя.
Рассмотрим эти две программы:
def function_that_prints():
print "I printed"
def function_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