Funciones lambda en Python. map(), filter() y reduce()

Funciones lambda en Python

Este tutorial describe en detalle qué son las funciones lambda en Python, también conocidas como funciones anónimas. Aquí descubrirás qué son estas funciones, cómo se definen y sus principales usos.

Índice

Qué son las funciones lambda en Python

En Python, las funciones lambda son también conocidas como funciones anónimas porque se definen sin un nombre.

Como sabes, una función en Python se define con la palabra reservada def. Sin embargo, una función anónima se define con la palabra reservada lambda.

Cómo se define una función anónima en Python

La sintaxis para definir una función lambda es la siguiente:

lambda parámetros: expresión

A continuación, te detallo las características principales de una función anónima:

  • Son funciones que pueden definir cualquier número de parámetros pero una única expresión. Esta expresión es evaluada y devuelta.
  • Se pueden usar en cualquier lugar en el que una función sea requerida.
  • Estas funciones están restringidas al uso de una sola expresión.
  • Se suelen usar en combinación con otras funciones, generalmente como argumentos de otra función.

Ejemplo:

cuadrado = lambda x: x ** 2

En el ejemplo anterior, x es el parámetro y x ** 2 la expresión que se evalúa y se devuelve.

Como ves, la función no tiene nombre y toda la definición devuelve una función que se asigna al identificador cuadrado.

En el siguiente ejemplo se aprecian las similitudes y diferencias de usar una función anónima y una función normal:

>>> def cuadrado(x):
...     return x ** 2
 
>>> cuad = lambda x: x ** 2

>>> print(cuadrado(3))
9

>>> print(cuad(5))
25

Ejemplos de uso comunes de funciones lambda: map(), filter() y reduce()

En esta última sección vamos a descubrir el potencial de las funciones lambda, especialmente cuando se usan en combinación con otras funciones.

map()

La función map() en Python aplica una función a cada uno de los elementos de una lista.

map(una_funcion, una_lista)

Imagina que tienes una lista de enteros y quieres obtener una nueva lista con el cuadrado de cada uno de ellos.

Seguramente, lo primero que se te ha ocurrido es algo similar a lo siguiente:

enteros = [1, 2, 4, 7]
cuadrados = []
for e in enteros:
    cuadrados.append(e ** 2)
     
print(cuadrados)
[1, 4, 16, 49]

Sin embargo, podemos usar una función anónima en combinación con map() para obtener el mismo resultado de una manera mucho más simple:

enteros = [1, 2, 4, 7]
cuadrados = list(map(lambda x : x ** 2, enteros))

print(cuadrados)
[1, 4, 16, 49]

La cosa se vuelve todavía más interesante cuando, en lugar de una lista de valores, pasamos como segundo parámetro una lista de funciones:

enteros = [1, 2, 4, 7]

def cuadrado(x):
    return x ** 2

def cubo(x):
    return x ** 3

funciones = [cuadrado, cubo]
for e in enteros:
    valores = list(map(lambda x : x(e), funciones))
    print(valores)

[1, 1]
[4, 8]
[16, 64]
[49, 343]

filter()

La función filter() filtra una lista de elementos para los que una función devuelve True.

filter(una_funcion, una_lista)

Imagina que quieres filtrar una lista de números para obtener solo los valores pares.

De nuevo, una primera aproximación podría ser como la siguiente:

valores = [1, 2, 3, 4, 5, 6, 7, 8, 9]
pares = []
for valor in valores:
    if valor % 2 == 0:
        pares.append(valor)

print(pares)
[2, 4, 6, 8]

No obstante, podemos usar la función filter() y una función lambda para obtener el mismo resultado con una sola línea de código:

valores = [1, 2, 3, 4, 5, 6, 7, 8, 9]
pares = list(filter(lambda x : x % 2 == 0, valores))

print(pares)
[2, 4, 6, 8]

reduce()

La última función de esta serie que vamos a ver es la función reduce(). Esta función se utiliza principalmente para llevar a cabo un cálculo acumulativo sobre una lista de valores y devolver el resultado.

La función reduce() está incluida en el módulo functools.

En este caso, la función que se pasa como primer parámetro recibe dos argumentos.

Imagina que quieres obtener el resultado de sumar todos los elementos de una lista.

Como en las veces anteriores, la suma la puedes calcular de la siguiente manera:

valores = [2, 4, 6, 5, 4]
suma = 0
for el in valores:
    suma += el

print(suma)
21

Pero también usando la función reduce() en combinación con una función lambda:

from functools import reduce
suma = reduce(lambda x, y: x + y, valores)

print(suma)
21

¿Quieres ser expert@ en Python? Recibe trucos Python y las últimas novedades del blog

¡Eyyy! Esto también te puede interesar 👇

* Te informo de que los datos de carácter personal que proporciones al comentar serán tratados por Juan José Lozano Gómez como responsable de esta web. La Finalidad es moderar los comentarios. La Legitimación es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en Disqus (disqus.com), mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos enviando un email a juanjo@j2logo.com. Encontrarás más información en la POLÍTICA DE PRIVACIDAD.

Sobre j2logo

j2logo profile

Quiero ayudarte a que seas mejor programador/a, pero no uno cualquiera, sino uno de los top.

¿Quieres ser expert@ en Python? 🐍

❤️ He ayudado a miles de programadores/as como tú a ser mejores Pythonistas

📩 Recibe de vez en cuando trucos y scripts Python y las últimas novedades del blog

* Al enviar el formulario confirmas que aceptas la POLITICA DE PRIVACIDAD

¿Quieres ser expert@ en PYTHON?

j2logo-pythonistas

❤️ He ayudado a miles de programadores/as como tú

📩 Recibe trucos, scripts y las novedades del blog

¿Quieres dominar Python?

Python, Guía para ser un Pythonista

El curso con el que aprender el lenguaje desde cero. Con mi soporte y ayuda.

OFERTA BLACK FRIDAY

35% de descuento