Каково формальное различие между "печатью" и "возвратом"?

Предположим, что я определяю простую функцию, которая отображает переданное ему целое число:

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.

  • printAndReturn возвращает x вызывающей стороне метода, поэтому:

    ret = printAndReturn()

ret будет иметь то же значение, что и x, т.е. "hello"

  • printAndReturnNothing ничего не возвращает, поэтому:

    other = printAndReturnNothing()

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