Pipe en Python o composición de funciones | Programador Web Valencia

Pipe en Python o composición de funciones

1 minuto

Tubería en Python

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.

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me ayudas?

Comprame un café
Pulsa sobre la imagen

No te sientas obligado a realizar una donación, pero cada aportación mantiene el sitio en activo logrando que continúe existiendo y sea accesible para otras personas. Además me motiva a crear nuevo contenido.

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...