¿Cuál es el propósito de la declaración de devolución? ¿En qué se diferencia de la impresión?
¿ Qué return
hace la declaración? ¿Cómo debería usarse en Python?
¿ En qué se return
diferencia de print
?
Ver también
A menudo, las personas intentan usar print
un bucle dentro de una función para ver múltiples valores y quieren poder usar los resultados desde afuera. Es necesario devolverlos, pero return
sale de la función la primera vez. Consulte ¿Cómo puedo usar `return` para recuperar múltiples valores de un bucle? ¿Puedo ponerlos en una lista? .
A menudo, los principiantes escriben una función que, en última instancia, print
es algo en lugar de return
ejecutarla, y luego también intentan obtener print
el resultado, lo que resulta en un resultado inesperado None
. Consulte ¿Por qué se imprime "Ninguno" después de la salida de mi función? .
Ocasionalmente en 3.x, la gente intenta asignar el resultado de print
a un nombre o usarlo en otra expresión, como input(print('prompt:'))
. En 3.x, print
es una función, por lo que no es un error de sintaxis, pero devuelve None
en lugar de lo que se muestra. Consulte ¿ Por qué la función de impresión no devuelve Ninguno? .
Ocasionalmente, las personas escriben código que intenta obtener print
el resultado de una llamada recursiva , en lugar de return
ejecutarlo correctamente. Al igual que si la función fuera simplemente llamada, esto no funciona para propagar el valor a través de la recursividad. Consulte ¿ Por qué mi función recursiva no devuelve Ninguno? .
Considere ¿Cómo obtengo un resultado (salida) de una función? ¿Cómo puedo utilizar el resultado más tarde? para preguntas que son simplemente sobre cómo utilizarlo return
, sin considerarlo print
.
La print()
función escribe, es decir, "imprime", una cadena en la consola. La return
declaración hace que su función salga y devuelva un valor a su llamador. El objetivo de las funciones en general es recibir entradas y devolver algo. La return
declaración se utiliza cuando una función está lista para devolver un valor a su llamador.
Por ejemplo, aquí hay una función que utiliza ambos print()
y return
:
def foo():
print("hello from inside of foo")
return 1
Ahora puedes 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 un script (por ejemplo, un .py
archivo) en lugar de hacerlo 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 aclare. 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 within foo")
... return 1
...
>>> foo()
hello within foo
1
>>> def bar():
... return 10 * foo()
...
>>> bar()
hello 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 por 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 declaración. return
hace que la función deje de ejecutarse y devuelva un valor a quienquiera que la haya llamado.
Piense en la declaración de impresión como si causara 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 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 dices 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 del 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 sofisticado para funciones que solo dependen de sus entradas para producir sus resultados: Transparencia referencial. Nuevamente, una definición de Wikipedia.
La transparencia referencial y la opacidad referencial son propiedades de partes de programas de computadora. 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 entender lo que esto significa si eres nuevo en la programación, pero creo que lo entenderás después de un poco de experimentación. Sin embargo, en general, puedes hacer cosas como imprimir en una función y también puedes tener una declaración de devolución al final.
Solo recuerda que cuando usas return básicamente estás diciendo "Una llamada a esta función es lo mismo que escribir el valor que se devuelve".
De hecho, Python insertará un valor de retorno si usted se niega a ingresar el suyo propio, se llama "Ninguno" y es un tipo especial que simplemente significa nada o nulo.