Python 3.2 documentation refiere a Collin Winter's functional
module que contiene la función compose
:función de composición y el módulo funcional
El Componer() función implementa composición de la función. En otras palabras , devuelve un envoltorio alrededor de los candados exteriores e interiores, como , que el valor de retorno del interior se alimenta directamente al exterior.
Desafortunadamente, este módulo no se ha actualizado desde julio de 2006; Me pregunto si hay algún reemplazo disponible. Por favor, solo necesito la función compose
. ¿La siguiente definición original de functional.compose
sigue siendo buena para Python 3?
def compose(func_1, func_2, unpack=False):
"""
compose(func_1, func_2, unpack=False) -> function
The function returned by compose is a composition of func_1 and func_2.
That is, compose(func_1, func_2)(5) == func_1(func_2(5))
"""
if not callable(func_1):
raise TypeError("First argument to compose must be callable")
if not callable(func_2):
raise TypeError("Second argument to compose must be callable")
if unpack:
def composition(*args, **kwargs):
return func_1(*func_2(*args, **kwargs))
else:
def composition(*args, **kwargs):
return func_1(func_2(*args, **kwargs))
return composition
Esto SO question es algo relacionado; pregunta si Python debería soportar la sintaxis especial para compose
.
Python 3 hace OT tienen el 'callable' construida en palabras clave - por lo general se sustituye con' hasattr (obj, "__call__") 'de lo contrario, el código anterior debería funcionar. – jsbueno
'callable() 'se agregó al idioma en 3.2. –
Creo que debería estar bien en Python 3.2. Como otros señalan, para Python 3.0 y 3.1, necesitarías implementar 'invocable', pero si estás contento con 3.2, solo copia, pega y da crédito. –