Funciones Anonimas
Las funciones lambda en Python, tambi茅n conocidas como funciones an贸nimas, son funciones peque帽as que se definen sin un nombre expl铆cito. Utilizan la palabra clave lambda
y pueden tener cualquier n煤mero de argumentos, pero solo una expresi贸n. Las funciones lambda se suelen usar para tareas simples y de corta duraci贸n, y son muy 煤tiles en combinaci贸n con otras funciones de orden superior como map
, filter
y reduce
.
Sintaxis de Funciones Lambda
La sintaxis b谩sica de una funci贸n lambda es:
lambda argumentos: expresi贸n
Ejemplo B谩sico
# Una funci贸n lambda que suma dos n煤meros
suma = lambda x, y: x + y
print(suma(2, 3)) # Output: 5
En este ejemplo, suma
es una funci贸n lambda que toma dos argumentos x
y y
, y devuelve su suma.
Usos Comunes de Funciones Lambda
1. Uso con map
La funci贸n map
aplica una funci贸n a todos los elementos de una secuencia (como una lista) y devuelve un iterador con los resultados.
numeros = [1, 2, 3, 4, 5]
cuadrados = map(lambda x: x**2, numeros)
print(list(cuadrados)) # Output: [1, 4, 9, 16, 25]
2. Uso con filter
La funci贸n filter
filtra elementos de una secuencia seg煤n una funci贸n que devuelve True
o False
.
numeros = [1, 2, 3, 4, 5]
pares = filter(lambda x: x % 2 == 0, numeros)
print(list(pares)) # Output: [2, 4]
3. Uso con reduce
La funci贸n reduce
aplica una funci贸n de acumulaci贸n a los elementos de una secuencia, reduci茅ndola a un solo valor. Para usar reduce
, necesitas importar functools
.
from functools import reduce
numeros = [1, 2, 3, 4, 5]
suma_total = reduce(lambda x, y: x + y, numeros)
print(suma_total) # Output: 15
Funciones Lambda como Claves de Ordenaci贸n
Ordenar una Lista de Tuplas
puntos = [(1, 2), (3, 1), (5, -1), (0, 0)]
ordenados = sorted(puntos, key=lambda punto: punto[1])
print(ordenados) # Output: [(5, -1), (0, 0), (3, 1), (1, 2)]
Ordenar una Lista de Diccionarios
personas = [
{'nombre': 'Ana', 'edad': 28},
{'nombre': 'Luis', 'edad': 34},
{'nombre': 'Carlos', 'edad': 22}
]
ordenados_por_edad = sorted(personas, key=lambda persona: persona['edad'])
print(ordenados_por_edad)
# Output: [{'nombre': 'Carlos', 'edad': 22}, {'nombre': 'Ana', 'edad': 28}, {'nombre': 'Luis', 'edad': 34}]
Funciones Lambda como Argumentos de Otras Funciones
Uso con sorted
frutas = ['manzana', 'banana', 'cereza', 'kiwi', 'mango']
ordenadas_por_longitud = sorted(frutas, key=lambda fruta: len(fruta))
print(ordenadas_por_longitud) # Output: ['kiwi', 'mango', 'banana', 'manzana', 'cereza']
Uso con max
y min
numeros = [1, 2, 3, 4, 5]
maximo = max(numeros, key=lambda x: -x) # Orden inverso
print(maximo) # Output: 5
Uso con any
y all
numeros = [1, 2, 3, 4, 5]
# Verificar si alg煤n n煤mero es par
hay_pares = any(map(lambda x: x % 2 == 0, numeros))
print(hay_pares) # Output: True
# Verificar si todos los n煤meros son positivos
todos_positivos = all(map(lambda x: x > 0, numeros))
print(todos_positivos) # Output: True
Funciones Lambda con Expresiones Complejas
Aunque las funciones lambda deben contener solo una expresi贸n, esa expresi贸n puede ser bastante compleja.
Uso de Condicionales en Lambda
# Funci贸n lambda con condicional
clasificar = lambda x: 'par' if x % 2 == 0 else 'impar'
print(clasificar(2)) # Output: 'par'
print(clasificar(3)) # Output: 'impar'
Lambda con Operaciones M煤ltiples
# Funci贸n lambda con m煤ltiples operaciones
calculo = lambda x, y: (x + y) * (x - y)
print(calculo(3, 2)) # Output: 5
Ejemplos Combinados
Lista de Funciones Lambda
operaciones = [
lambda x: x**2,
lambda x: x**3,
lambda x: x**4
]
for operacion in operaciones:
print(operacion(2))
# Output:
# 4
# 8
# 16
Diccionario de Funciones Lambda
operaciones = {
'cuadrado': lambda x: x**2,
'cubo': lambda x: x**3,
'cuarta_potencia': lambda x: x**4
}
print(operaciones ) # Output: 4
print(operaciones ) # Output: 8
print(operaciones ) # Output: 16