class compose(object): def __init__(self, *functions): if not functions: raise ValueError("compose need at least one function.") self.functions = list(functions)
def __call__(self, *args, **kwargs): result = self.functions[-1](*args, **kwargs) for function in reversed(self.functions[:-1]): result = function(result) return result
from functools import partialdef cMap(x): return lambda y: map(x, y)
def add(x): return lambda y: x+y
c = compose(','.join, list, reversed, cMap(str), cMap(add(5)))