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

image image image image image image image image image image image