3.2 Funciones en Python: definición, argumentos, retorno y ámbito

1

Modularización y definición con la palabra clave def

Las funciones son bloques de código reutilizables diseñados para encapsular una tarea computacional concreta:

$$\text{def nombre_funcion(parametro_1, parametro_2):}$$
Ejemplo:

Definimos una función para calcular la energía de un fotón dada su longitud de onda:

$$\text{def energia_foton(longitud_onda): return (6.626e-34 * 3e8) / longitud_onda}$$
2

Parámetros por defecto y argumentos nombrados

Python permite asignar valores predeterminados en la cabecera para hacer opcionales ciertos argumentos:

$$\text{def simular_difusion(temperatura, coef=1.5e-9): return coef * (temperatura / 300.0)}$$
Ejemplo:

Invocamos la función pasando argumentos posicionales o argumentos con nombre explícito:

$$\text{resultado = simular_difusion(350, coef=2.1e-9)}$$
3

Retorno múltiple y empaquetado de tuplas

Una función puede devolver varios resultados separándolos por comas, lo que genera internamente una tupla inmutable:

$$\text{def resolver_cinetica(v0, a, t): return v0 + a*t, v0*t + 0.5*a*(t**2)}$$
Ejemplo:

Desempaquetamos los valores directamente en dos variables independientes:

$$\text{v_fin, x_fin = resolver_cinetica(0.0, 9.8, 2.5)}$$
4

Ámbito de variables: espacio local frente a espacio global

Las variables creadas dentro del cuerpo de una función poseen ámbito local y dejan de existir tras su ejecución:

$$\text{def registrar_muestra(id_val): valor_interno = id_val * 2; return valor_interno}$$
Ejemplo:

Intentar acceder a variables locales desde el cuerpo principal del script genera un error NameError:

$$\text{print(valor_interno)} \longrightarrow \text{Error de ámbito: variable no definida en el espacio global.}$$
Ejemplo 1: Conversión bidireccional entre escalas térmicas
$$\text{def kelvin_a_celsius(k): return k - 273.15}$$
$$\text{temp_c = kelvin_a_celsius(300.0)} \longrightarrow 26.85^\circ\text{C}$$
Ejemplo 2: Función con validación defensiva de tipos
$$\text{def calcular_resistencia(voltaje, corriente):}$$
$$\text{if corriente == 0: return None}$$
$$\text{return voltaje / corriente }$$
Ejemplo 3: Función que procesa y muta una lista in situ
$$\text{def normalizar_senales(lista_datos, factor):}$$
$$\text{for i in range(len(lista_datos)): lista_datos[i] *= factor}$$
Ejemplo 4: Retorno de tupla con estadísticas básicas
$$\text{def extremos_serie(datos): return min(datos), max(datos), sum(datos)/len(datos)}$$
$$\text{minimo, maximo, media = extremos_serie([1.2, 4.5, 0.8, 3.1])}$$
Ejemplo 5: Función generadora de identificadores de probetas
$$\text{def generar_etiqueta(prefijo, numero, sufijo="DAT"): return f"{prefijo}_{numero:03d}.{sufijo}"}$$
$$\text{print(generar_etiqueta("NANO", 7))} \longrightarrow \text{"NANO_007.DAT"}$$