Python: Programación funcional

Descubre cómo implementar programación funcional en Python con técnicas avanzadas y ejemplos prácticos. Mejora tu código con funciones puras y más.

La programación funcional es un paradigma de programación que trata a las funciones como ciudadanos de primera clase. En Python, este enfoque puede mejorar la legibilidad, la mantenibilidad y la testabilidad del código. A continuación, se presentan algunas técnicas y conceptos clave de la programación funcional en Python.

Funciones puras

Una función pura es aquella que, dado un mismo conjunto de argumentos, siempre devuelve el mismo resultado y no tiene efectos secundarios. Las funciones puras son fundamentales en la programación funcional y facilitan el razonamiento sobre el código.

def suma(a, b):
    return a + b

print(suma(2, 3))  # Siempre devuelve 5

Funciones de orden superior

Las funciones de orden superior son aquellas que pueden tomar otras funciones como argumentos y/o devolver funciones como resultado. Esto permite la creación de abstracciones poderosas y reutilizables.

def aplicar_funcion(f, x):
    return f(x)

def cuadrado(n):
    return n * n

print(aplicar_funcion(cuadrado, 5))  # Devuelve 25

Funciones lambda

Las funciones lambda son funciones anónimas que se definen usando la palabra clave lambda. Son útiles para funciones cortas y simples.

doble = lambda x: x * 2
print(doble(4))  # Devuelve 8

Funciones map, filter y reduce

Estas funciones son fundamentales en la programación funcional para transformar y reducir colecciones de datos.

  • map: Aplica una función a todos los elementos de una colección.
numeros = [1, 2, 3, 4]
dobles = list(map(lambda x: x * 2, numeros))
print(dobles)  # Devuelve [2, 4, 6, 8]
  • filter: Filtra elementos de una colección según una condición.
numeros = [1, 2, 3, 4]
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares)  # Devuelve [2, 4]
  • reduce: Aplica una función acumulativa a los elementos de una colección para reducirla a un solo valor. Para usar reduce, es necesario importarla desde el módulo functools.
from functools import reduce

numeros = [1, 2, 3, 4]
suma_total = reduce(lambda x, y: x + y, numeros)
print(suma_total)  # Devuelve 10

Funciones decoradoras

Los decoradores son una forma de modificar el comportamiento de una función sin cambiar su código. Son útiles para añadir funcionalidades como el registro de llamadas o la validación de argumentos.

def decorador(func):
    def envoltura(*args, **kwargs):
        print(f"Llamando a {func.__name__}")
        return func(*args, **kwargs)
    return envoltura

@decorador
def saludo(nombre):
    return f"Hola, {nombre}"

print(saludo("Mundo"))  # Imprime "Llamando a saludo" y "Hola, Mundo"

Iteradores y generadores

Los iteradores y generadores son fundamentales en la programación funcional para trabajar con secuencias de datos de manera eficiente.

  • Iteradores: Objetos que implementan los métodos __iter__ y __next__.
class Contador:
    def __init__(self, max):
        self.max = max
        self.n = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.n < self.max:
            self.n += 1
            return self.n
        else:
            raise StopIteration

contador = Contador(3)
for num in contador:
    print(num)  # Imprime 1, 2, 3
  • Generadores: Funciones que producen una secuencia de valores usando la palabra clave yield.
def generador_contador(max):
    n = 0
    while n < max:
        n += 1
        yield n

for num in generador_contador(3):
    print(num)  # Imprime 1, 2, 3

La programación funcional en Python ofrece una manera elegante y eficiente de escribir código. Implementar estos conceptos puede ayudar a mejorar la calidad y mantenibilidad de tus proyectos.

Certifícate en Python con CertiDevs PLUS

Lecciones de este módulo de Python

Lecciones de programación del módulo Programación funcional del curso de Python.

Ejercicios de programación en este módulo de Python

Evalúa tus conocimientos en Programación funcional con ejercicios de programación Programación funcional de tipo Test, Puzzle, Código y Proyecto con VSCode.