¿Cuál es el propósito de la declaración de devolución?


Respuestas:


100

La print()función escribe, es decir, "imprime", una cadena en la consola. La returndeclaración hace que su función salga y devuelva un valor a su llamador. El objetivo de las funciones en general es tomar entradas y devolver algo. La returndeclaración se usa cuando una función está lista para devolver un valor a su llamador.

Por ejemplo, aquí hay una función que utiliza print()y return:

def foo():
    print("hello from inside of foo")
    return 1

Ahora puede ejecutar código que llame a foo, así:

if __name__ == '__main__':
    print("going to call foo")
    x = foo()
    print("called foo")
    print("foo returned " + str(x))

Si ejecuta esto como una secuencia de comandos (por ejemplo, un .pyarchivo) en lugar de en el intérprete de Python, obtendrá la siguiente salida:

going to call foo
hello from inside foo
called foo   
foo returned 1

Espero que esto lo aclare más. El intérprete escribe valores de retorno en la consola para que pueda ver por qué alguien podría estar confundido.

Aquí hay otro ejemplo del intérprete que demuestra que:

>>> def foo():
...     print("hello from within foo")
...     return 1
...
>>> foo()
hello from within foo
1
>>> def bar():
...   return 10 * foo()
...
>>> bar()
hello from within foo
10

Puede ver que cuando foo()se llama desde bar(), 1 no se escribe en la consola. En su lugar, se utiliza para calcular el valor devuelto bar().

print()es una función que causa un efecto secundario (escribe una cadena en la consola), pero la ejecución se reanuda con la siguiente instrucción. returnhace que la función deje de ejecutarse y devuelva un valor a quien lo haya llamado.


Necesitas usar "foo returned " + str(x)o de lo contrario obtendrás TypeError: cannot concatenate 'str' and 'int' objects.
icktoofay

@NathanHughes gracias por la respuesta cuidadosamente elaborada.
Andy K

23

Creo que el diccionario es tu mejor referencia aquí.

Devolver e imprimir

En breve:

return devuelve algo o responde a la persona que llama de la función mientras que la impresión produce texto


23

Piense en la declaración de impresión como causante de un efecto secundario , hace que su función escriba algo de texto para el usuario, pero no puede ser utilizado por otra función.

Intentaré explicar esto mejor con algunos ejemplos y un par de definiciones de Wikipedia.

Aquí está la definición de una función de Wikipedia

Una función, en matemáticas, asocia una cantidad, el argumento de la función, también conocida como entrada, con otra cantidad, el valor de la función, también conocida como salida.

Piense en eso por un segundo. ¿Qué significa cuando dice que la función tiene un valor?

¡Lo que significa es que puedes sustituir el valor de una función por un valor normal! (Suponiendo que los dos valores son el mismo tipo de valor)

¿Por qué querrías que preguntes?

¿Qué pasa con otras funciones que pueden aceptar el mismo tipo de valor como entrada ?

def square(n):
    return n * n

def add_one(n):
    return n + 1

print square(12)

# square(12) is the same as writing 144

print add_one(square(12))
print add_one(144)
#These both have the same output

Existe un término matemático elegante para las funciones que solo dependen de sus entradas para producir sus salidas: Transparencia referencial. Nuevamente, una definición de Wikipedia.

La transparencia referencial y la opacidad referencial son propiedades de partes de los programas informáticos. Se dice que una expresión es referencialmente transparente si se puede reemplazar con su valor sin cambiar el comportamiento de un programa.

Puede ser un poco difícil comprender qué significa esto si eres nuevo en la programación, pero creo que lo conseguirás después de experimentar un poco. Sin embargo, en general, puede hacer cosas como imprimir en una función, y también puede tener una declaración de retorno al final.

Solo recuerde que cuando usa return, básicamente está diciendo "Una llamada a esta función es lo mismo que escribir el valor que se devuelve"

Python realmente insertará un valor de retorno por usted si se niega a ingresar el suyo, se llama "Ninguno", y es un tipo especial que simplemente no significa nada o es nulo.


12

En Python, comenzamos a definir una función con "def" y, en general, pero no necesariamente, finalizamos la función con "return".

Una función de la variable x se denota como f (x). ¿Qué hace esta función? Supongamos que esta función suma 2 ax. Entonces, f (x) = x + 2

Ahora, el código de esta función será:

def A_function (x):
    return x + 2

Después de definir la función, puede usarla para cualquier variable y obtener el resultado. Como:

print A_function (2)
>>> 4

Podríamos escribir el código de forma ligeramente diferente, como por ejemplo:

def A_function (x):
    y = x + 2
    return y
print A_function (2)

Eso también daría "4".

Ahora, incluso podemos usar este código:

def A_function (x):
    x = x + 2
    return x
print A_function (2)

Eso también daría 4. Ver, que la "x" al lado de return en realidad significa (x + 2), no x de "A_function (x)".

Supongo que a partir de este simple ejemplo, comprenderá el significado del comando de retorno.


11

return significa "generar este valor desde esta función".

print significa "enviar este valor a (generalmente) stdout"

En Python REPL, se mostrará un retorno de función en la pantalla de forma predeterminada (esto no es lo mismo que imprimir).

Este es un ejemplo de impresión:

>>> n = "foo\nbar" #just assigning a variable. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>

Este es un ejemplo de devolución:

>>> def getN():
...    return "foo\nbar"
...
>>> getN() #When this isn't assigned to something, it is just output
'foo\nbar'
>>> n = getN() # assigning a variable to the return value. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>

11

Esta respuesta repasa algunos de los casos que no se han discutido anteriormente.
La declaración de devolución le permite rescindir la ejecución de una función antes de llegar al final. Esto hace que el flujo de ejecución regrese inmediatamente al llamador.

En la línea número 4:

def ret(n):
    if n > 9:
         temp = "two digits"
         return temp     #Line 4        
    else:
         temp = "one digit"
         return temp     #Line 8
    print("return statement")
ret(10)

Después de que se ejecuta la declaración condicional, la ret()función se termina debido a return temp(línea 4). Por lo tanto, laprint("return statement") , no se ejecuta.

Salida:

two digits   

Este código que aparece después de las declaraciones condicionales, o el lugar donde el flujo de control no puede llegar, es el código muerto .

Devolución de valores
En las líneas 4 y 8, la declaración de devolución se utiliza para devolver el valor de una variable temporal después de que se haya ejecutado la condición.

Para resaltar la diferencia entre imprimir y devolver :

def ret(n):
    if n > 9:
        print("two digits")
        return "two digits"           
    else :
        print("one digit")
        return "one digit"        
ret(25)

Salida:

two digits
'two digits'

8

Solo para agregar a la excelente respuesta de @Nathan Hughes:

La returndeclaración se puede utilizar como una especie de flujo de control. Al poner una (o más) returndeclaraciones en medio de una función, podemos decir: "deja de ejecutar esta función. ¡O tenemos lo que queríamos o algo salió mal!"

He aquí un ejemplo:

>>> def make_3_characters_long(some_string):
...     if len(some_string) == 3:
...         return False
...     if str(some_string) != some_string:
...         return "Not a string!"
...     if len(some_string) < 3:
...         return ''.join(some_string,'x')[:,3]
...     return some_string[:,3]
... 
>>> threechars = make_3_characters_long('xyz')    
>>> if threechars:
...     print threechars
... else:
...     print "threechars is already 3 characters long!"
... 
threechars is already 3 characters long!

Consulte la sección Estilo de código de la Guía de Python para obtener más consejos sobre esta forma de uso return.


4

La diferencia entre "devolver" e "imprimir" también se puede encontrar en el siguiente ejemplo:

REGRESO:

def bigger(a, b):
    if a > b:
        return a
    elif a <b:
        return b
    else:
        return a

El código anterior dará resultados correctos para todas las entradas.

IMPRESIÓN:

def bigger(a, b):
    if a > b:
        print a
    elif a <b:
        print b
    else:
        print a

NOTA: Esto fallará en muchos casos de prueba.

ERROR:

----  

FAILURE: Test case input: 3, 8.

            Expected result: 8  

FAILURE: Test case input: 4, 3.

            Expected result: 4  

FAILURE: Test case input: 3, 3.

            Expected result: 3  

You passed 0 out of 3 test cases


1
Hmm, su código de impresión no falló para los casos de prueba que proporcionó. ¡Todos tenían razón!
codingbryan

4

Creo que una respuesta realmente simple podría ser útil aquí:

returnhace que el valor (una variable, a menudo) esté disponible para que lo use la persona que llama (por ejemplo, para que lo almacene una función dentro de la cual se encuentra la función que usa return). Sin él return, su valor o variable no estaría disponible para que la persona que llama los almacene / reutilice.

print se imprime en la pantalla, pero no hace que el valor o la variable estén disponibles para que los utilice la persona que llama.

(Admitiendo plenamente que las respuestas más completas son más precisas).


3

Aquí está mi comprensión. (espero que ayude a alguien y es correcto).

def count_number_of(x):
    count = 0
    for item in x:
        if item == "what_you_look_for":
        count = count + 1
    return count

Entonces, esta simple pieza de código cuenta el número de ocurrencias de algo. La colocación de retorno es significativa. Le dice a su programa dónde necesita el valor. Entonces, cuando imprime, envía la salida a la pantalla. Cuando regresa le dice al valor que vaya a alguna parte. En este caso, puede ver que count = 0 está sangrado con return; queremos que el valor (count + 1) reemplace 0. Si intenta seguir la lógica del código cuando aplica más sangría al comando return, la salida siempre será 1 , porque nunca le diríamos al recuento inicial que cambie. Espero haberlo hecho bien. Ah, y el retorno siempre está dentro de una función.


3

returnes parte de la definición de una función, mientras que printenvía texto a la salida estándar (generalmente la consola).

Una función es un procedimiento que acepta parámetros y devuelve un valor. returnes para el último, mientras que el primero está terminado def.

Ejemplo:

def timestwo(x):
    return x*2

2

Lo mejor de la returnfunción es que puede devolver un valor de la función, pero puede hacer lo mismo con, printentonces, ¿cuál es la diferencia? Básicamente, returnno se trata simplemente de devolverlo, da salida en forma de objeto para que podamos guardar ese valor de retorno de la función en cualquier variable, pero no podemos hacerlo printporque es lo mismo que stdout/couten C Programming.

Siga el código a continuación para una mejor comprensión

CÓDIGO

def add(a, b):
    print "ADDING %d + %d" % (a, b)
    return a + b

def subtract(a, b):
    print "SUBTRACTING %d - %d" % (a, b)
    return a - b

def multiply(a, b):
    print "MULTIPLYING %d * %d" % (a, b)
    return a * b

def divide(a, b):
    print "DIVIDING %d / %d" % (a, b)
    return a / b


print "Let's do some math with just functions!"

age = add(30, 5)
height = subtract(78, 4)
weight = multiply(90, 2)
iq = divide(100, 2)

print "Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq)


# A puzzle for the extra credit, type it in anyway.
print "Here is a puzzle."

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

print "That becomes: ", what, "Can you do it by hand?"

Ahora estamos haciendo nuestras propias funciones matemáticas para add, subtract, multiply,y divide. Lo importante a notar es la última línea donde decimos return a + b(in add). Lo que hace es lo siguiente:

  1. Nuestra función se llama con dos argumentos: ay b.
  2. Imprimimos lo que está haciendo nuestra función, en este caso "AGREGANDO".
  3. Luego le decimos a Python que haga algo al revés: devolvemos la suma de a + b. Podría decir esto como "Los agrego ay bluego los devuelvo".
  4. Python suma los dos números. Luego, cuando la función finalice, cualquier línea que la ejecute podrá asignar este a + bresultado a una variable.

1

returndebe usarse para funciones / métodos recursivos o desea usar el valor devuelto para aplicaciones posteriores en su algoritmo.

print debe usarse cuando desea mostrar una salida significativa y deseada al usuario y no desea saturar la pantalla con resultados intermedios en los que el usuario no está interesado, aunque son útiles para depurar su código.

El siguiente código muestra cómo usar returny printcorrectamente:

def fact(x):
    if x < 2:
        return 1
    return x * fact(x - 1)

print(fact(5))

Esta explicación es válida para todos los lenguajes de programación, no solo para Python .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.