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.
{{ comments.length }} comentarios