Python 3.2 documentation refers to Collin Winter’s functional module which contains function compose:
The compose() function implements function composition. In other
words, it returns a wrapper around the outer and inner callables, such
that the return value from inner is fed directly to outer.
Unfortunately, this module hasn’t been updated since July 2006; I wonder if there’s any replacement available.
For now, I only need compose function. Is the following original functional.compose definition still good for 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
This SO question is somewhat related; it asks whether Python should support special syntax for compose.
Your implementation of
composeis valid for python 3.2 as discussed in the comments above.Most of the functions of the library you gave have a python equivalent written in the documentation.
Functions such as
mapandfilterare already implemented in python and can also be simply expressed as list comprehensions. Python has anidfunction returning the identity of an object (as integer), but theidfunction of the library can be expressed aslambda x: x.Another modules you might find interesting are
itertoolsandfunctoolswhich haspartialandreduce(which is similar tofoldlbut the argument order is not the same).Here is a simple implementations of a few of them that I didn’t find in the standard library: