Разница между возвратом и печатью в python?

В python я, кажется, не понимаю функцию возврата. Зачем его использовать, если можно просто распечатать?

def maximum(x, y):
    if x > y:
        print(x)
    elif x == y:
        print('The numbers are equal')
    else:
        print(y)

maximum(2, 3)

Этот код дает мне 3. Но использование return делает то же самое.

def maximum(x, y):
    if x > y:
        return x
    elif x == y:
        return 'The numbers are equal'
    else:
        return y

print(maximum(2, 3))

Так в чем разница между ними? Извините за мега нубский вопрос!


person Chris    schedule 07.10.2010    source источник


Ответы (5)


Суть

возврат не является функцией. Это конструкция потока управления (подобная конструкциям if else). Это то, что позволяет вам брать данные с собой между вызовами функций.

Разбить

  • print: дает значение пользователю в виде выходной строки. print(3) выводит строку '3' на экран для просмотра пользователем. Программа потеряла бы ценность.

  • return: дает значение программе. Тогда вызывающие функцию будут иметь фактические данные и тип данных (bool, int и т. д.). return 3 будет иметь значение 3 вместо того, где была вызвана функция.

Пример времени

def ret():
    return 3

def pri():
    print(3)

4 + ret() # ret() is replaced with the number 3 when the function ret returns
# >>> 7
4 + pri() # pri() prints 3 and implicitly returns None which can't be added
# >>> 3
# >>> TypeError cannot add int and NoneType
person t3dodson    schedule 15.03.2013

Что бы вы сделали, если бы вам нужно было сохранить печатную стоимость? Посмотрите хорошее объяснение в документации и см.:

>>> def ret():
    return 42

>>> def pri():
    print(42)


>>> answer = pri()
42
>>> print(answer)         # pri implicitly return None since it doesn't have return statement
None
>>> answer = ret()
>>> answer
42

Это также ничем не отличается от оператора return на любом другом языке.

person SilentGhost    schedule 07.10.2010

Для более сложных расчетов необходимо возвращать промежуточные значения. Например:

print minimum(3, maximum(4, 6))

В этом случае вы не можете maximum распечатать свой результат.

person RichieHindle    schedule 07.10.2010
comment
print minimum(3, maximum(4, 4)) не работает в версии ОП :-( - person eumiro; 07.10.2010
comment
@eumiro: Разве не в этом смысл ответа Ричи Хиндла? - person Tim Pietzcker; 07.10.2010
comment
@Tim: пример Ричи работает со второй версией OP. Мой нет. - person eumiro; 07.10.2010

Помните, что интерактивная командная строка — не единственное место, откуда будут вызываться методы. Методы также могут вызываться другими методами, и в этом случае print не является удобным способом передачи данных между ними.

person Gareth    schedule 07.10.2010

Честно говоря, это зависит от того, для чего вам нужна функция. Если в спецификации функции указано, что она распечатает максимальный срок, то то, что у вас есть, в порядке. Что обычно происходит для такого метода, так это то, что метод должен возвращать фактическое значение, которое больше. В случае, если они равны, не имеет значения, какое значение возвращается.

person Anthony    schedule 07.10.2010