Funciones productivas y funciones estériles

Algunas de las funciones que estamos usando, como las matemáticas, producen resultados; a falta de un nombre mejor, las llamaremos funciones productivas (fruitfulfunctions). Otras funciones, como muestra_dos_veces, realizan una acción, pero no devuelven un valor. A esas las llamaremos funciones estériles (void functions).

Cuando llamas a una función productiva, casi siempre querrás hacer luego algo con el resultado; por ejemplo, puede que quieras asignarlo a una variable o usarlo como parte de una expresión:

Cuando llamas a una función en modo interactivo, Python muestra el resultado:

Pero en un script, si llamas a una función productiva y no almacenas el resultado de la misma en una variable, ¡el valor de retorno se desvanece en la niebla!

Este script calcula la raíz cuadrada de 5, pero dado que no almacena el resultado en una variable ni lo muestra, no resulta en realidad muy útil.

Las funciones estériles pueden mostrar algo en la pantalla o tener cualquier otro efecto, pero no devuelven un valor. Si intentas asignar el resultado a una variable, obtendrás un valor especial llamado None (nada).

El valor None no es el mismo que la cadena “None”. Es un valor especial que tiene su propio tipo:

Para devolver un resultado desde una función, usamos la sentencia return dentro de ella. Por ejemplo, podemos crear una función muy simple llamada sumados, que suma dos números y devuelve el resultado.

Cuando se ejecuta este script, la sentencia print mostrará “8”, ya que la función sumados ha sido llamada con 3 y 5 como argumentos. Dentro de la función, los parámetros a y b equivaldrán a 3 y a 5 respectivamente. La función calculó la suma de ambos número y la guardó en una variable local a la función llamada suma. Después usó la sentencia return para enviar el valor calculado de vuelta al código de llamada como resultado de la función, que fue asignado a la variable x y mostrado en pantalla.