¿Diferencia entre devoluciones e impresión en Python? [duplicar]

10

En Python, parece que no entiendo la función de retorno. ¿Por qué usarlo cuando podría simplemente imprimirlo?

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

maximum(2, 3)

Este código me da 3. Pero usar return hace exactamente lo mismo.

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

print(maximum(2, 3))

Entonces, ¿cuál es la diferencia entre los dos? ¡Perdón por la pregunta del mega novato!

0
30

El punto

el retorno no es una función. Es una construcción de flujo de control (como if elseconstrucciones). Es lo que le permite "llevar datos con usted entre llamadas a funciones".

Descomponer

  • print: le da el valor al usuario como una cadena de salida. print(3)daría una cadena '3'a la pantalla para que el usuario la vea. El programa perdería el valor.

  • return: da el valor al programa . Las personas que llaman a la función tienen los datos reales y el tipo de datos (bool, int, etc.) return 3tendrían el valor 3 en lugar de donde se llamó a la función.

Tiempo de ejemplo

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
11

¿Qué haría si necesita guardar el valor impreso? Eche un vistazo a una buena explicación en los documentos y cf .:

>>> 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

Tampoco es diferente de una returndeclaración en cualquier otro idioma.

4

Para cálculos más complejos, debe devolver valores intermedios. Por ejemplo:

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

No puede maximumimprimir su resultado en ese caso.

3
  • print minimum(3, maximum(4, 4)) no funciona en la versión de OP :-(
    eumiro
    7/10/10 a las 12:12
  • @eumiro: ¿No es ese exactamente el punto de la respuesta de RichieHindle? 7/10/10 a las 12:38
  • @Tim: el ejemplo de Richie funciona con la segunda versión de OP. El mío no.
    eumiro
    7/10/10 a las 12:41
4

Recuerde que la línea de comandos interactiva no es el único lugar desde donde se llamarán los métodos. Los métodos también pueden ser llamados por otros métodos y, en ese caso, printno es una forma utilizable de pasar datos entre ellos.

0

Honestamente, depende de lo que necesite que haga la función. Si la especificación de la función indica que imprimirá el término máximo, entonces lo que tiene está bien. Lo que sucede generalmente con un método como este es que el método debe devolver el valor real que es mayor. En el caso de que sean iguales, no importa qué valor se devuelva.