¿Cuál es el propósito de la declaración de devolución? ¿En qué se diferencia de la impresión?

Resuelto Hitesh Kumar asked hace 13 años • 0 respuestas

¿ Qué returnhace la declaración? ¿Cómo debería usarse en Python?

¿ En qué se returndiferencia de print?


Ver también

A menudo, las personas intentan usar printun bucle dentro de una función para ver múltiples valores y quieren poder usar los resultados desde afuera. Es necesario devolverlos, pero returnsale 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, printes algo en lugar de returnejecutarla, y luego también intentan obtener printel 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 printa un nombre o usarlo en otra expresión, como input(print('prompt:')). En 3.x, printes una función, por lo que no es un error de sintaxis, pero devuelve Noneen 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 printel resultado de una llamada recursiva , en lugar de returnejecutarlo 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.

Hitesh Kumar avatar Aug 20 '11 09:08 Hitesh Kumar
Aceptado

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 recibir entradas y devolver algo. La returndeclaració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 .pyarchivo) 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. returnhace que la función deje de ejecutarse y devuelva un valor a quienquiera que la haya llamado.

Nathan Hughes avatar Aug 20 '2011 02:08 Nathan Hughes

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.

Wes avatar Aug 23 '2011 05:08 Wes