Python 3.2 documentation riferisce a Collin Winter's functional
module contenente funzione compose
:funzione di composizione e modulo funzionale
La composizione() funzione implementa composizione di funzioni. In altre parole , restituisce un wrapper attorno alle callebles esterne e interne, ad esempio che il valore di ritorno dall'interno viene alimentato direttamente all'esterno.
Sfortunatamente, questo modulo non è stato aggiornato da luglio 2006; Mi chiedo se c'è qualche sostituzione disponibile.
Per ora, ho solo bisogno della funzione compose
. La seguente definizione originale di functional.compose
è ancora valida per 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
Questo SO question è in qualche modo correlato; chiede se Python debba supportare la sintassi speciale per compose
.
Python 3 fa ot hanno la 'callable' costruita nel parola chiave - di solito è sostituito con' hasattr (obj, "__call__") 'altrimenti, il codice sopra dovrebbe funzionare. – jsbueno
'callable()' è stato aggiunto alla lingua in 3.2. –
Penso che dovrebbe andare bene in Python 3.2. Come altri sottolineano, per Python 3.0 e 3.1, è necessario implementare 'callable', ma se si è soddisfatti di 3.2, basta copiare, incollare e accreditare. –