Programación Funcional con Python - Ejemplos Practicos

Hola a todos, mi nombre es Luis y les doy la bienvenida a Mi Diario Python.
En este articulo me dedicare a mencionarles y mostrarles los conceptos básicos de la programación funcional.
Antes de comenzar quisiera recordarles que en el blog tenemos unos muy buenos artículos para Aprender Python.

Programación Funcional

Resultado de imagen para programacion funcional
La programación funcional es un estilo de programación, que como dice su nombre, gira en torno a funciones. Un ejemplo clave de la programación funcional, son las funciones de orden superior, las cuales reciben otras funciones como argumento, o las devuelven como resultado. Ejemplo:
def test(func, n):
    return func(func(n))

def mult(x):
    return x * x

print(test(mult, 2))

16
¿Por que 2? La función test recibe a la función y la llama dos veces dentro de su cuerpo.
Índice

Funciones Puras

La programación funciona, busca utilizar funciones puras. La funciones puras no tienen un efecto secundario y devuelven un valor que depende unicamente de sus argumentos.
A continuación les mostrare un ejemplo de una función pura.
def func_pure(a,b):
    x = a * b
    return x / (a + b)

func_pure(20, 14)

8.235294117647058
Como pueden observar, la función pura, solo devuelve valor dependiente de sus argumentos, sin la necesidad de una variable externa y sin alterar ninguna variable global.

Lambdas

Las funciones lambas, son funciones anonimas. Son conocidas de esta manera por la forma en la que son declaradas. A continuación les mostrare un ejemplo de una función lambda.
fun = lambda x: x**2
fun(5)

25
Como pueden observar, las funciones lambda son de una solo linea. Su sintaxis es muy simple: palabra clave (lambda) argumentos que tomara, seguido de dos puntos definiriamos la acción que realizara la función. También se puede observar que no hay necesidad de de escribir return, ya que lambda solo devuelve el valor.

Filter y Map

Las funciones incorporada map y filter son funciones de orden superior muy útilis que operan sobre listas.
La función filter, filtra un iterable eliminando elementos que no coinciden con el predicado. Ejemplo:
nums = [11,22,33,44,55]
res = list(filter(lambda x: x%2==0, nums))
print(res)
[22, 44]
Como pueden apreciar, el resultado del filtro son solo valores que sean divisibles por 2.
La función map recibe una función y un iterable como argumentos y devuelve un nuveo iterable con la función aplicada a cada argumento. Ejemplo:
def add_five(x):
    return x + 5

nums = [11,22,33,44,55]
result = list(map(add_five, nums))
print(result)
[16, 27, 38, 49, 60]

Y el resultado seria, el valor de cada elemento de la lista con la función aplicada (sumar 5 a cada elemento)

Generadores

Los generadores son un tipo de iterable, como las listas o las tuplas. A diferencia de las listas, no permiten indexar con índices arbitrarios, pero pueden aún ser iterados con el bucle for. Los generadores pueden ser creados utilizando funciones y la sentencia yield. Ejemplo:
def countdown():
    i=5
    while i > 0:
        yield i
        i -= 1

for i in countdown():
    print(i)
5
4
3
2
1
Y como pueden observar, el resultado es una cuenta regresiva.

Decoradores

Los decoradores ofrecen una manera de modificar funciones utilizando otras funciones. Esto es ideal cuando necesitas extender la funcionalidad de las funciones que no quieres modificar. Ejemplo:
def decor(func):
    def wrap():
        print("="*12)
        func()
        print("="*12)
    return wrap

@decor
def print_text():
    print("Hola Mundo!")
    
print_text()
============
Hola Mundo!
============
Como pueden observar, los decoradores pueden llegar a ser muy útiles.

Recursión

La recursión es un concepto muy importante en la programación funcional. Lo fundamental de la recursión es la autorreferencia - función que se llama a sí misma. Se utiliza para resolver problemas que pueden ser divididos en subproblemas más sencillos del mismo tipo. Ejemplo:
def factorial(x):
    if x == 1:
        return 1
    else:
        return x * factorial(x-1)
    
print(factorial(6))
720

Conjuntos

Los conjuntos son estructuras de datos parecidas a las listas o alos diccionarios. Son creados utilizando llaves o la función set. Comparten algunas de las funcionalidades de las listas, como el uso de in para chequear si contienen un elemento en particular.
num_set = {1,2,3,4}
word_set = set(["spam","eggs", "sausage"])

print(7 in num_set)
print("spam" in word_set)
False
True
Bueno, dejare este articulo hasta aqui, este tema lo ampliare con articulos individuales en una proxima ocación.
¿Alguna duda? No olvides dejar tu comentario.
Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.
  1. Unknown dice:

    Muy buen, seguí publicando documetos asi, un abrazo desde Argentina

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey