¿Cuál es el propósito de la statement de retorno?

¿Cuál es la explicación básica simple de lo que es la statement de retorno, cómo usarla en Python?

¿Y cuál es la diferencia entre esto y la statement print ?

La función print() escribe, es decir, “imprime”, una cadena en la consola. La statement de return hace que su función salga y devuelva un valor a su interlocutor. El punto de las funciones en general es tomar entradas y devolver algo. La statement de return se utiliza cuando una función está lista para devolver un valor a su interlocutor.

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

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

Ahora puedes ejecutar el código que llama 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 un script (por ejemplo, un archivo .py ) en lugar de en el intérprete de Python, obtendrá el siguiente resultado:

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

Espero que esto lo haga más claro. 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 se llama a foo() desde la bar() , 1 no se escribe en la consola. En su lugar, se utiliza para calcular el valor devuelto desde la 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 statement. return hace que la función deje de ejecutarse y devuelva un valor a lo que se llame.

Creo que el diccionario es tu mejor referencia aquí.

Volver e imprimir

En breve:

return devuelve algo o responde al interlocutor de la función mientras que la impresión produce texto

Piense que la statement de impresión provoca un efecto secundario , hace que su función escriba algo de texto al usuario, pero no puede ser utilizada 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 la entrada, con otra cantidad, el valor de la función, también conocida como la salida.

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

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

¿Por qué quieres que preguntes?

¿Qué pasa con otras funciones que pueden aceptar el mismo tipo de valor como una 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 

Hay un término matemático sofisticado para las funciones que solo dependen de sus entradas para producir sus salidas: Transparencia de referencia. Una vez más, una definición de Wikipedia.

La transparencia referencial y la opacidad referencial son propiedades de partes de progtwigs de computadora. Se dice que una expresión es referencialmente transparente si se puede reemplazar con su valor sin cambiar el comportamiento de un progtwig

Puede que sea un poco difícil comprender lo que esto significa si eres nuevo en la progtwigción, pero creo que lo obtendrás después de algunos experimentos. Sin embargo, en general, puede hacer cosas como imprimir en una función, y también puede tener una statement de devolución al final.

Solo recuerde que cuando usa el retorno, 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 para usted si se niega a hacerlo, se llama “Ninguno”, y es un tipo especial que simplemente no significa nada, o es nulo.

En Python, comenzamos a definir una función con “def” y, en general, pero no necesariamente, terminamos 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 agrega 2 a x. 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 un resultado. Como:

 print A_function (2) >>> 4 

Podríamos simplemente escribir el código de manera 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 retorno realmente significa (x + 2), no x de “A_function (x)”.

Supongo que a partir de este sencillo ejemplo, entenderías el significado de comando de retorno.

Los casos que no se han comentado anteriormente.
La statement de retorno le permite finalizar la ejecución de una función antes de llegar al final. El flujo de ejecución regresa inmediatamente al llamante.

En la línea número 9:

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

Después de que se ejecuta la instrucción condicional, la función ret () se termina debido a la devolución (línea 9). Por lo tanto, la impresión (“statement de retorno”) no se ejecuta.

  output : two digits 

Este código que aparece después de la statement de devolución o el lugar donde el flujo de control no ha alcanzado es el código muerto .

Valores de retorno
En las líneas 4 y 8, la statement de retorno se está utilizando para devolver el valor de la variable temporal después de que se haya ejecutado la condición.

Para resaltar la diferencia entre impresión y devolución :

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

significa ” return este valor de esta función”.

medios de print , “enviar este valor a (generalmente) stdout”

En el REPL de Python, el retorno de una función se enviará a la pantalla de manera 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 retorno:

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

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

La statement de return se puede utilizar como un tipo de flujo de control. Al poner una (o más) declaraciones de return en el centro de una función, podemos decir: “deja de ejecutar esta función. ¡O tenemos lo que queríamos o algo salió mal!”

Aquí hay 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 utilizar la return .

La diferencia entre “devolución” e “impresión” también se puede encontrar en el siguiente ejemplo:

REGRESO:

 def bigger(a, b): if a > b: return a elif 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  

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

Aquí está mi entendimiento. (Espero que ayude a alguien y sea correcto).

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

Así que 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 progtwig dónde necesita el valor. Así que cuando imprimes, envías salida a la pantalla. Cuando regresas, dices el valor para ir a algún lugar. En este caso, puede ver que cuenta = 0 está sangrado con retorno. Queremos que el valor (cuenta + 1) reemplace a 0. Si intenta seguir la lógica del código al sangrar más el comando de retorno, la salida siempre será 1 , porque nunca le diríamos a la cuenta inicial que cambie. Espero haberlo hecho bien. Ah, y el retorno está siempre dentro de una función.

return es parte de la definición de una función, mientras que la print envía el texto a la salida estándar (generalmente la consola).

Una función es un procedimiento que acepta parámetros y devuelve un valor. return es para el último, mientras que el primero se hace con def .

Ejemplo:

 def timestwo(x): return x*2 

return debe usarse para funciones / métodos recursivos o si desea utilizar 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 utilizar return e print correctamente:

 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 progtwigción, no solo para Python .

Lo mejor de la función de return es que puede devolver un valor desde la función pero puede hacer lo mismo con la print ¿cuál es la diferencia? Básicamente, el return no solo devuelve, sino que da salida en forma de objeto para que podamos guardar el valor de retorno de la función en cualquier variable, pero no podemos print porque es lo mismo que stdout/cout en C Programming .

Siga el código de abajo 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 devolver a + b (en add ). Lo que esto hace es lo siguiente:

  1. Nuestra función se llama con dos argumentos: b .
  2. Imprimimos lo que nuestra función está haciendo, en este caso “AGREGANDO”.
  3. Luego le decimos a Python que haga algo al revés: devolvemos la sum de a + b . Podría decir esto como: “Yo agrego b y luego las devuelvo”.
  4. Python sum los dos números. Luego, cuando la función finaliza, cualquier línea que se ejecute podrá asignar este resultado a a + b a una variable.