Reduce tricks are nice, but I prefer clarity sometimes:

def double(x):
    return x*2

def add3(x):
    return x+3


def compose(*funcs):
    for func in funcs:
        if not callable(func):
            raise ValueError('Must pass callable functions')

    def inner(value):
        for func in funcs:
            value = func(value)
        return value

    return inner


add_then_double = compose(add3, double)
double_then_add = compose(double, add3)

print add_then_double(1) # prints 8
print double_then_add(1) # prints 5
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to