Funciones lambda
Las funciones lambda en Python son una forma concisa de definir funciones anónimas (sin nombre) en una sola línea. Son especialmente útiles cuando necesitas una función simple y rápida, normalmente para pasarla como argumento a funciones como map()
, filter()
o sorted()
.
🧠 ¿Qué es una función lambda?
Es una función inline, escrita con la palabra clave lambda
, que puede tener:
- Cualquier número de argumentos (pero solo una expresión).
- No usa
return
, porque la expresión se evalúa y retorna automáticamente.
🧾 Sintaxis general:
lambda argumentos: expresión
✅ Ejemplos básicos
1. Sumar dos números
suma = lambda x, y: x + y
print(suma(5, 3)) # Resultado: 8
2. Elevar al cuadrado
al_cuadrado = lambda x: x ** 2
print(al_cuadrado(4)) # Resultado: 16
3. Obtener el último carácter de una cadena
ultimo = lambda s: s[-1]
print(ultimo("Python")) # Resultado: 'n'
🔄 Usos comunes
1. Con sorted()
para ordenar por longitud
palabras = ["sol", "mar", "montaña", "cielo"]
ordenadas = sorted(palabras, key=lambda x: len(x))
print(ordenadas) # ['sol', 'mar', 'cielo', 'montaña']
2. Con map()
para transformar una lista
numeros = [1, 2, 3, 4]
cuadrados = list(map(lambda x: x**2, numeros))
print(cuadrados) # [1, 4, 9, 16]
3. Con filter()
para filtrar elementos
numeros = [1, 2, 3, 4, 5, 6]
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares) # [2, 4, 6]
📌 Diferencia entre lambda
y def
# Con def
def suma(x, y):
return x + y
# Con lambda
suma_lambda = lambda x, y: x + y
def
permite definir funciones más complejas, con varias líneas.lambda
es ideal para funciones simples y cortas, usadas temporalmente.
⚠️ Limitaciones
- Solo puede tener una expresión (no múltiples líneas).
- No puede contener declaraciones como
print
,if
,for
, etc. (aunque sí puedes usar expresiones ternarias).
🧪 Ejemplo con expresión condicional
es_par = lambda x: "par" if x % 2 == 0 else "impar"
print(es_par(7)) # Resultado: "impar"
🧮 Resumen
Característica | Funciones lambda |
---|---|
Nombre propio | No (función anónima) |
Uso | Funciones simples/rápidas |
Sintaxis | lambda x: x + 1 |
Palabra clave | lambda |
Return | Implícito |
¡Perfecto! Vamos a ver ejemplos reales y prácticos del uso de funciones lambda en estructuras complejas como diccionarios, listas anidadas y procesamiento de datos.
✅ 1. Ordenar una lista de diccionarios por una clave
Supón que tienes empleados y quieres ordenarlos por edad:
empleados = [
{"nombre": "Ana", "edad": 28},
{"nombre": "Luis", "edad": 34},
{"nombre": "Marta", "edad": 25}
]
ordenados = sorted(empleados, key=lambda x: x["edad"])
print(ordenados)
🔎 Resultado:
[
{'nombre': 'Marta', 'edad': 25},
{'nombre': 'Ana', 'edad': 28},
{'nombre': 'Luis', 'edad': 34}
]
✅ 2. Ordenar por valor dentro de una clave anidada
Supón que tienes una lista de productos con precios dentro de otra clave:
productos = [
{"nombre": "Mouse", "detalles": {"precio": 15.99}},
{"nombre": "Teclado", "detalles": {"precio": 25.50}},
{"nombre": "Monitor", "detalles": {"precio": 199.99}}
]
ordenados = sorted(productos, key=lambda x: x["detalles"]["precio"])
print(ordenados)
✅ 3. Obtener totales a partir de diccionarios anidados
Imagina facturas con ítems y cantidades:
facturas = [
{"cliente": "Juan", "items": [{"precio": 10, "cantidad": 2}, {"precio": 5, "cantidad": 3}]},
{"cliente": "Ana", "items": [{"precio": 20, "cantidad": 1}]}
]
totales = list(map(lambda f: {
"cliente": f["cliente"],
"total": sum(item["precio"] * item["cantidad"] for item in f["items"])
}, facturas))
print(totales)
🔎 Resultado:
[
{'cliente': 'Juan', 'total': 35},
{'cliente': 'Ana', 'total': 20}
]
✅ 4. Filtrar diccionarios con una condición usando filter
Filtrar solo productos con precio mayor a 20:
productos = [
{"nombre": "Camiseta", "precio": 18},
{"nombre": "Chaqueta", "precio": 55},
{"nombre": "Zapatos", "precio": 40}
]
caros = list(filter(lambda p: p["precio"] > 20, productos))
print(caros)
✅ 5. Sumar valores dentro de una lista de diccionarios
Suma total de precios:
ventas = [
{"producto": "Libro", "precio": 15},
{"producto": "Lámpara", "precio": 22},
{"producto": "Reloj", "precio": 30}
]
total = sum(map(lambda v: v["precio"], ventas))
print(total) # 67
🧠 BONUS: Usar lambda
como key
en max()
o min()
empleado_mayor = max(empleados, key=lambda x: x["edad"])
print(empleado_mayor)