¿Qué hace el retorno? Nada es devuelto

He estado aprendiendo Python desde hace algunos días. Sin embargo, no entiendo el retorno. He leído varias explicaciones de mis libros de texto y en línea; ¡Ellos no ayudan!

Tal vez alguien pueda explicar lo que hace el retorno de una manera sencilla? He escrito varios scripts de Python útiles (para mí), pero nunca he usado return porque no sé lo que hace.

¿Podría proporcionar un ejemplo sencillo que muestre por qué se debe utilizar la devolución?

También parece no hacer nada:

def sqrt(n): approx = n/2.0 better = (approx + n/approx)/2.0 while better != approx: approx = better better = (approx + n/approx)/2.0 return approx sqrt(25) 

Mi libro de texto me dijo: “Intente llamar a esta función con 25 como un argumento para confirmar que devuelve 5.0”.

    La única forma en que sé cómo verificar esto es usar la impresión . Pero no sé si eso es lo que están buscando. La pregunta simplemente dice que llamar con 25. No dice que se agregue nada más al código para confirmar que devuelve 5.0.

    return devuelve un valor de una función:

     def addseven(n): return n + 7 a = 9 b = addseven(a) print(b) # should be 16 

    También se puede utilizar para salir de una función:

     def addseventosix(n): if n != 6: return else: return n + 7 

    Sin embargo, incluso si no tiene una statement de return en una función (o si la usa sin especificar un valor para devolver), la función todavía devuelve algo: None .

     def functionthatisuseless(n): n + 7 print(functionthatisuseless(8)) # should output None 

    A veces es posible que desee devolver varios valores de una función. Sin embargo, no puede tener varias declaraciones de return : el flujo de control abandona la función después de la primera, por lo que cualquier cosa posterior no se ejecutará. En Python, usualmente usamos una tupla, y desempaquetar tuple:

     def addsevenandaddeight(n): return (n+7, n+8) # the parentheses aren't necessary, they are just for clarity seven, eight = addsevenandaddeight(0) print(seven) # should be 7 print(eight) # should be 8 

    return declaraciones de return son las que le permiten llamar a funciones en los resultados de otras funciones:

     def addseven(n): return n+7 def timeseight(n): return n*8 print(addseven(timeseight(9)) # what the intepreter is doing (kind of): # print(addseven(72)) # 72 is what is returned when timeseight is called on 9 # print(79) # 79 

    O bien, debe agregar una print o escribir todo en el intérprete interactivo para ver el valor de retorno.

    return hace posible obtener algún resultado / salida de una función. A este valor, más adelante en el código, debe asignarlo a una variable:

     a = sqrt(25) 

    Su libro de texto espera que pruebe cosas en el intérprete interactivo , que le muestra los valores a medida que los ingresa. Aquí hay un ejemplo de cómo se ve esto:

     $ python Python 2.7.5+ (default, Sep 17 2013, 17:31:54) [GCC 4.8.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> def sqrt(n): ... approx = n/2.0 ... better = (approx + n/approx)/2.0 ... while better != approx: ... approx = better ... better = (approx + n/approx)/2.0 ... return approx ... >>> sqrt(25) 5.0 >>> 

    La clave aquí es la diferencia entre expresiones y declaraciones. def es una statement, y no produce ningún resultado. sqrt , que define el bloque def , es una función; y las funciones siempre producen un valor de retorno, de modo que se pueden usar en expresiones, como sqrt(25) . Si su función no contiene return o yield este valor es None , que el intérprete ignora, pero en este caso, sqrt devolvió un número que se imprime automáticamente (y se almacena en una variable llamada _ ). En una secuencia de comandos, puede reemplazar la última línea con print sqrt(25) para obtener la salida a un terminal, pero lo útil de los valores de retorno es que puede hacer más procesamiento, como root=sqrt(25) o print sqrt(25)-5 .

    Si tuviéramos que ejecutar exactamente las mismas líneas que un script, en lugar de hacerlo en modo interactivo, no hay impresión implícita. La línea sqrt(25) se acepta como una statement de una expresión, lo que significa que se calcula, pero el valor simplemente se descarta. Ni siquiera entra en _ (que es el equivalente al botón Ans de la calculadora). Normalmente usamos esto para funciones que causan efectos secundarios, como quit() , que hace que Python se quit() .

    Por cierto, la print es una statement en Python 2 pero una función en Python 3. Es por eso que cada vez más usos tienen paréntesis.

    Aquí hay un script que se basa en sqrt (en este caso, la propia versión de Python) que devuelve un valor:

     from math import sqrt area = float(raw_input("Enter a number: ")) shortside = sqrt(area) print "Two squares with the area", area, "square meters,", print "placed side to side, form a rectangle", 2*shortside, "meters long", print "and", shortside, "meters wide"