Pipe en Python o composición de funciones

Hace poco estuvimos hablando sobre como realizar un pipe en JavaScript, además de recorrer las ventajas de usar la composición de funciones. En esta ocasión nos centraremos sobre las diferentes formas que podemos lograr los mismos resultados usando Python.

La primera opción puede ser la de crear una función que realice la tarea por nosotros.

from functools import reduce

def pipe(*fns):
    def inner(x):
        return reduce(lambda v, f: f(v), fns, x)
    return inner

Sin embargo Python dispone de una librería llamada itertools que replica el mecanismo de tuberías.

import itertools

def set_lower_case(str_):
    return str_.lower()

def concat_hash(str_):
    return "#" + str_

def delete_spaces(str_):
    return str_.replace(" ", "")

str_format = itertools.pipe(
    concat_hash,
    delete_spaces,
    set_lower_case
)("texto EN tubería")

print(str_format)
# #textoentuberia

Por otro lado podemos usar funciones lambda usando la propia sintaxis de Python.

from functools import reduce

pipe = lambda *fns: (lambda x: reduce(lambda v, f: f(v), fns, x))

set_lower_case = lambda str_: str_.lower()
concat_hash = lambda str_: "#" + str_
delete_spaces = lambda str_: str_.replace(" ", "")

str_format = pipe(
    concat_hash,
    delete_spaces,
    set_lower_case
)("texto EN tubería")

print(str_format)
# #textoentuberia

Sin embargo no debemos olvidar cual es el objetivo principal: simplificar y resolver problemas complejos. En caso contrario, solo estaremos realizando sobreingeniería.

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?

You can use the terminal.

ssh customer@andros.dev -p 5555

Written by Andros Fenollosa

January 22, 2023

1 min of reading

You may also like