Saltar al contenido

Mejor composición de funciones en Python

Puede darse el caso de que encuentres algún problema con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes aplicar el código al proyecto final.

Solución:

No puede replicar la sintaxis exacta, pero puede hacer algo similar:

def f(*args):
    result = args[0]

    for func in args[1:]:
        result = func(result)

    return result

Parece funcionar:

>>> f('a test', reversed, sorted, ''.join)
' aestt'

No puede obtener esa sintaxis exacta, aunque puede obtener algo como F(x)(foo, bar, baz). Aquí hay un ejemplo simple:

class F(object):
    def __init__(self, arg):
        self.arg = arg

    def __call__(self, *funcs):
        arg = self.arg
        for f in funcs:
            arg = f(arg)
        return arg

def a(x):
    return x+2
def b(x):
    return x**2
def c(x):
    return 3*x

>>> F(2)(a, b, c)
48
>>> F(2)(c, b, a)
38

Esto es un poco diferente de la respuesta de Blender, ya que almacena el argumento, que luego se puede reutilizar con diferentes funciones.

Esto es algo así como lo opuesto a la aplicación de función normal: en lugar de especificar la función por adelantado y dejar que algunos argumentos se especifiquen más adelante, usted especifica el argumento y deja que la(s) función(es) se especifique(n) más tarde. Es un juguete interesante, pero es difícil pensar por qué realmente querrías esto.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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