5.3 Funciones Anónimas
En Python, además de las funciones definidas con def, existen las llamadas funciones anónimas o funciones lambda.
Se denominan así porque no tienen nombre propio y suelen utilizarse para operaciones simples y de corta duración.
Son muy útiles cuando se necesita una función como argumento dentro de otra, sin necesidad de declararla por separado.
Las funciones lambda están estrechamente relacionadas con la programación funcional, ya que permiten tratar las funciones como valores que se pueden almacenar en variables, pasar como argumento o devolver desde otras funciones.
1️⃣ ¿Qué es una función anónima?
Una función anónima es una función definida en una sola línea, mediante la palabra clave lambda.
No necesita la palabra def, ni un nombre, ni un bloque indentado.
Sintaxis general
lambda parámetros: expresión
lambdaindica que se está creando una función anónima.- Los parámetros son los valores que recibe, separados por comas.
- La expresión es el resultado que devuelve automáticamente (no se usa
return).
Ejemplo práctico
doble = lambda x: x * 2
print(doble(5)) # 10
- Aquí
doblealmacena una función anónima que multiplica por 2 el valor recibido. - Al llamarla con
doble(5), devuelve10. - Aunque la función no tiene nombre propio, la hemos asignado a la variable
doblepara poder usarla.
2️⃣ Comparación con funciones definidas con def
Una función lambda es similar a una función normal, pero más compacta. Ambas realizan la misma tarea, aunque su forma de escritura difiere.
def cuadrado(n):
return n ** 2
cuadrado_lambda = lambda n: n ** 2
print(cuadrado(4))
print(cuadrado_lambda(4))
Ambas funciones devuelven el cuadrado de un número.
La diferencia es que la versión con def es más explícita y puede incluir documentación o varias líneas de código, mientras que lambda se usa para expresiones simples en una única línea.
3️⃣ Uso de lambdas como argumento de otras funciones
Una de las principales ventajas de las funciones lambda es que pueden utilizarse como argumento en otras funciones.
Esto se aplica con frecuencia junto a funciones como map(), filter() o sorted(), que requieren otra función como parámetro.
🟩 Uso con map()
map() aplica una función a cada elemento de un iterable (como una lista) y devuelve un nuevo iterable con los resultados.
numeros = [1, 2, 3, 4, 5]
cuadrados = list(map(lambda x: x ** 2, numeros))
print(cuadrados)
map() recorre la lista numeros y aplica la función lambda x: x ** 2 a cada elemento.
El resultado es una nueva lista [1, 4, 9, 16, 25].
🟦 Uso con filter()
filter() selecciona los elementos de una colección que cumplen una condición booleana.
numeros = [10, 15, 20, 25, 30]
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares)
filter() aplica la función lambda x: x % 2 == 0 a cada elemento.
Solo se conservan los que cumplen la condición (es decir, los números pares): [10, 20, 30].
🟨 Uso con sorted()
La función sorted() permite ordenar listas o secuencias.
El parámetro key especifica una función que se usará para determinar el criterio de ordenación.
palabras = ["zorro", "perro", "gato", "elefante"]
ordenadas = sorted(palabras, key=lambda p: len(p))
print(ordenadas)
La función lambda p: len(p) indica que los elementos deben ordenarse según su longitud.
El resultado será ['gato', 'perro', 'zorro', 'elefante'].
4️⃣ Lambdas con múltiples parámetros
Una función lambda puede recibir varios parámetros, separados por comas, al igual que una función normal.
suma = lambda a, b, c: a + b + c
print(suma(2, 3, 4))
La función recibe tres valores y devuelve su suma. Este tipo de lambdas es útil para realizar operaciones rápidas que no necesitan ser reutilizadas más de una vez.
5️⃣ Limitaciones de las funciones lambda
Aunque las lambdas son prácticas y compactas, presentan ciertas limitaciones frente a las funciones definidas con def:
- Solo pueden contener una expresión, no varias sentencias.
- No pueden incluir docstrings ni anotaciones de tipo.
- No pueden realizar acciones complejas, como bucles o condicionales extensos.
- Suelen usarse en contextos donde se requiere una función pequeña y desechable.
Ejemplo de mala práctica:
# No recomendable
compleja = lambda x: x * 2 if x > 0 else -x / 2
Aunque funciona, la legibilidad es pobre.
Cuando el código se vuelve más complejo, es preferible usar def.
6️⃣ Aplicaciones prácticas de lambdas
Las funciones lambda son especialmente útiles en combinación con otras herramientas de Python que operan sobre secuencias o colecciones.
🟩 Ejemplo 1: cálculo rápido
temperaturas_c = [0, 20, 37, 100]
temperaturas_f = list(map(lambda c: c * 9 / 5 + 32, temperaturas_c))
print(temperaturas_f)
Convierte una lista de temperaturas en grados Celsius a Fahrenheit usando una sola línea con map() y lambda.
🟦 Ejemplo 2: filtrado de datos
valores = [5, -3, 8, 0, -2, 7]
positivos = list(filter(lambda x: x > 0, valores))
print(positivos)
Selecciona únicamente los números positivos de la lista valores.
🟨 Ejemplo 3: ordenación personalizada
personas = [
("Ana", 28),
("Luis", 22),
("María", 35)
]
ordenadas = sorted(personas, key=lambda p: p[1])
print(ordenadas)
La función lambda p: p[1] indica que la lista debe ordenarse por la edad (segundo elemento de la tupla).
El resultado será [('Luis', 22), ('Ana', 28), ('María', 35)].
7️⃣ Cuándo usar y cuándo evitar lambdas
✅ Usar funciones lambda cuando:
- Se necesita una función simple y corta.
- Se pasa como argumento a
map(),filter(),sorted()u otras funciones similares. - No es necesario reutilizarla varias veces.
❌ Evitar funciones lambda cuando:
- La función requiere más de una instrucción o lógica compleja.
- Se necesita documentar o tipar los parámetros.
- La legibilidad puede verse comprometida.
Las funciones lambda son una herramienta útil para escribir código conciso y expresivo. Usadas correctamente, aportan claridad en operaciones simples; pero si se abusa de ellas, pueden reducir la legibilidad del programa.
🧩 Practica las funciones anónimas
Las expresiones lambda o funciones anónimas son un recurso muy util pero requiere práctica.
Prueba a realizar estos retos y mejora tu habilidad ... Descarga el archivo para practicar
Puedes consultar las soluciones aquí