Fundamentos de Programación · Programación

Funciones y retorno de valores

Definir funciones con parámetros y valores de retorno, usar argumentos por defecto y nombrados, y estructurar programas en unidades reutilizables.

Funciones y retorno de valores

Dar nombre a lo que se repite Si copias y pegas un bloque de código más de una vez, debería ser una función. Las funciones son el mecanismo por el que un programa deja de ser una lista de instrucciones y pasa a ser un vocabulario de acciones con nombre.

Una función agrupa instrucciones bajo un nombre, recibe valores de entrada (parámetros) y devuelve un resultado. Se define con def, un nombre, una lista de parámetros entre paréntesis y un cuerpo indentado. Se usa llamándola con argumentos reales.

Parámetros y argumentos

El return y su ausencia

return entrega un resultado y termina la función de inmediato. Sin ningún return, la función devuelve el valor nulo None. Distinguir entre imprimir y devolver es crucial: solo lo devuelto puede seguir procesándose.

Devolver varios valores

Python permite devolver una tupla de varios resultados, que se recogen desempaquetando en varias variables. Es cómodo para funciones que calculan a la vez, por ejemplo, media y desviación.

Documentar con docstring

Funciones puras y sus ventajas

Una función pura devuelve siempre el mismo resultado para la misma entrada y no tiene efectos secundarios. Se prueba fácil, se paraleliza sin miedo y no esconde sorpresas; conviene preferirla salvo que el efecto sea necesario.

Descomponer problemas

Abstracción y ocultamiento

Quien usa una función no necesita saber cómo la implementa, solo qué le da y qué le devuelve. Esa pared entre uso e implementación es lo que permite cambiar los detalles sin romper nada.

El paso de argumentos y sus sorpresas

Los objetos mutables pasados como argumentos pueden modificarse dentro y afectar fuera. Esa compartición es potente pero fuente de bugs: una función que altera la lista que recibió cambia el dato del llamante.

Varias fichas de entrada entran en una máquina de engranajes y sale un único resultado
Una función recibe argumentos, procesa y devuelve un valor con return para poder seguir usándolo.

Reutilización en proyectos de datos

Errores típicos

Ejemplo resuelto: una función para normalizar columnas

Repetimos el mismo cálculo de restar la media y dividir por la desviación en varias columnas. Conviene encapsularlo en una función.

  1. Definir la función con def y un parámetro que será la columna de entrada.
  2. Calcular dentro la media y la desviación de esa columna.
  3. Devolver la columna transformada con return, no imprimirla.
  4. Llamar la función pasándole cada columna y guardar el resultado.
  5. Comprobar que devolver permite encadenar otras operaciones sobre el valor obtenido.

¿Para qué sirve en la realidad?

Encapsular una transformación como función evita duplicar código, permite probarla por separado y la hace reutilizable sobre cualquier columna o experimento, que es la base de un pipeline mantenible.

Si una función no ejecuta ninguna sentencia return, su valor devuelto es:

Imprimir un valor dentro de una función equivale a devolverlo.

Funciones

Nombre para un trozo de lógica
función
Valor que se pasa al llamar
argumento
Entrega el resultado y termina
return
Valor devuelto si no hay return
None
Misma entrada, misma salida, sin efectos
función pura

Ordena los pasos para definir y usar una función correctamente:

Definir
Parametrizar
Calcular
Devolver
Llamar

Subrutina
Secuencia de instrucciones empaquetada bajo un nombre reutilizable.

Une cada término con su papel en una función:

Funciones y retorno

# Funciones
## Definición
### def, nombre y parámetros
### docstring
## Retorno
### return entrega y termina
### sin return devuelve None
### imprimir no es devolver
## Diseño
### una cosa bien hecha
### funciones puras
### abstracción

Función (programación)
Bloque de código reutilizable que recibe argumentos y devuelve un resultado.

Tienes tres bloques de código que normalizan columnas de forma parecida. Propón cómo convertirlos en una sola función reutilizable: qué parámetros recibiría y qué devolvería.