Programación Funcional - Lambda, Map, Filter y Reduce
- ¿Que es la Programacion Funcional?
-
Utilizando Lambda, Map, Filter y Reduce.
- #Función lambda que devuelve la suma de sus dos argumentos: f = lambda x, y : x + y f(2 + 2) #Resultado: 4 #Segundo ejemplo de lambda #Función lambda que devuelve la raíz cuadrada de su argumento a = lambda x : x**1/2 a(233) #Resultado: 15,2643
- Como pueden ver, la función lambda nos devuelve valores que dependen de sus argumentos, esto significa que es una función pura.
- Operador Map:
¿Que es la Programacion Funcional?
Es un estilo de programacion que (como lo indica su nombre) se basa en funciones.
La programación funcional busca usar funciones puras. Las funciones puras no tienen efectos secundarios, no manejan datos mutables o de estado, y devuelven un valor que depende solo de sus argumentos.
Ejemplo: Funciones puras e impuras.
La función "impure" es una función impura porque cambio el estado de list.
En cambio, la función "pure_func" es una función pura porque devuelve valores que dependen de sus argumentos.
Utilizando Lambda, Map, Filter y Reduce.
Cuando tenemos que realizar operaciones sobre listas, en lugar de utilizar los clásicos loops, podemos utilizar las funciones Map, Reduce, y Filter.
Operador lambda:
El operador lambda o función lambda, es una forma de crear funciones anónimas, es decir, funciones sin nombre. Estas funciones son desechable, es decir, solo se necesitan donde se han creado. Las funciones lambda se utilizan principalmente en combinación con las funciones Map, Filter y Reduce.
La sintaxis general de una función lambda es bastante simple:
lambda argument_list : expression
El operador lambda o función lambda, es una forma de crear funciones anónimas, es decir, funciones sin nombre. Estas funciones son desechables, es decir, solo se nesecitan donde se han creado. Las funciones lambda se utilizan principalmente en combinatorio con las funciones Map, Filter y Reduce.
La sintaxis general de una funcion lambda es bastante simple:
lambda argument_list : expresison
Ejemplo:
Como pueden ver, la función lambda nos devuelve valores que dependen de sus argumentos, esto significa que es una función pura.
Operador Map:
El operador Map, toma una función y un iterable como argumentos, y devuelve un nuevo iterable con la función aplicada a cada argumento . Ejemplo:
Como pueden ver, "map" nos a devuelto una lista con todo los elementos de la lista "nums", vemos que a cada elemento le sumo 5.
Si usáramos el operador lambda en vez de declarar la función "add_five", el resultado seria el mismo. Veamos un ejemplo:
Como pueden ver el resultado es el mismo, increíble, ¿Verdad?.
Otra cosa a tener en claro es que en estos dos ejemplo, que para convertir el resultado en una lista, se hace uso del método "list".
Operador Filter:
El operado filter (función, lista) ofrece una forma elegante de filtrar todos los elementos de una lista, para los que la función de función devuelve True.
El operador filter(f, l) necesita una función f como primer argumento. f devuelve un valor booleano, es decir, verdadero o falso. Esta función se aplicará a cada elemento de la lista. Solo si f devuelve True, el elemento de la lista se incluirá en la lista de resultados.
Como pueden observar, el operador filter no incluyo a los elementos que no fueran divisibles entre 2, otra cosa es que hacemos uso de lambda, ya que es utilizado especialmente para este tipo de situaciones.
Operador Reduce:
La función Reduce reduce los valores de la lista a un solo valor aplicando una funcion reductora. El primer argumento es la función reductora que vamos a aplicar y el segundo argumento es la lista.
Para entender un poco mejor al operador reduce, veamos una imagen que nos explica su procedimiento.
-
-
Sí, rara vez uso estos operadores, pero creo es que es importante conocerlos y saber como funcionan, para cuando llegue el día, pues no estaremos tan perdidos :D.
-
-
Gracias por la explicación; estoy aprendiendo Python y me parece muy interesante el artículo.
-
Excelente explicación y muy didáctica.
-
Gracias por el articulo, todo explicado de manera muy sencilla. Saludos!!
-
Buenos días,
en el filter hay algo raro, ya que 0%2 == 0 y no aparece en el resultado.Además para mostrar el resultado tengo que convertirlo en una lista, aunque eso no sé si será por la versión de Python.
nums = [0, 2, 5, 8, 10, 23, 31, 35, 36, 47, 50, 77, 93]
result = filter(lambda x: x % 2 == 0, num)
print(list(result))
[0, 2, 8, 10, 36, 50]Salu2
-
Nada raro en el filter, el 0 aparece en la lista resultante.
En cuanto al resultado que te da, no es por la versión de Python.
La función map y filter devuelven un iterador, es decir, un elemento que se puede recorrer. Sólo tienes que convertirlo a lista si quieres mostrar el resultado, pero si se lo pasas a otra función para que recorra los elementos resultantes, lo entenderá perfectamente.
-
Deja una respuesta
Interesante, pero ahora casi todas las tendencias apuntan a usar listas y conjuntos por comprensión, dejando casi sin usar map() y filter(), y sólo reduce() para casos muy aislados.