Немного опоздал на вечеринку, но вот более чистый метод, Имо. Подойдет большинству потребностей FP.
def stream(*args):
return reduce(lambda a, t: t[0](t[1], a), args[1:], args[0])
Базовая карта, фильтр, уменьшить:
>>> my_list = [1, 2, 3, 4, 5]
>>> stream(my_list,
... (map, lambda x: x ** 2),
... (filter, lambda x: x < 20),
... (reduce, lambda a, x: a + x))
30