Python 3.2 documentation dotyczy Collin Winter's functional
module który zawiera funkcję compose
:komponować funkcji i moduł funkcjonalny
komponować() realizuje funkcję kompozycji funkcji. W innych słowach zwraca on owijkę wokół zewnętrznych i wewnętrznych podpórek, na przykład , że wartość zwracana z wewnętrznej jest podawana bezpośrednio na zewnątrz.
Niestety ten moduł nie został zaktualizowany od lipca 2006; Zastanawiam się, czy jest dostępny jakiś zamiennik.
Na razie potrzebuję tylko funkcji compose
. Czy następująca oryginalna definicja functional.compose
jest nadal dobra dla Pythona 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
Ta SO question jest nieco spokrewniona; pyta, czy Python powinien obsługiwać specjalną składnię dla compose
.
Python 3 robi ot oddać 'callable' wybudowany w kluczowych - zwykle jest zastąpiony' hasattr (obj, "__call__") 'w przeciwnym razie powyższy kod powinien zadziałać. – jsbueno
'callable()' zostało dodane z powrotem do języka w 3.2. –
Myślę, że powinno być dobrze w Pythonie 3.2. Jak zauważają inni, w Pythonie 3.0 i 3.1 musisz zaimplementować 'callable', ale jeśli jesteś zadowolony z wersji 3.2, po prostu skopiuj, wklej i zapisz. –