code: def broadcast(_INPUT, *funcs, **kwargs):
      
      map_func = kwargs.get('map_func', _map_func)
      apply_func = kwargs.get('apply_func', _apply_func)
      splits = izip(*tee(_INPUT, len(funcs)))
      return map_func(partial(apply_func, funcs), splits)
docs: copies an iterable and delivers the items to multiple functions
  
             /--> foo2bar(_INPUT) --> \
            /                          \
      _INPUT ---> foo2baz(_INPUT) ---> _OUTPUT
            \                          /
             \--> foo2qux(_INPUT) --> /
  
      One way to construct such a flow in code would be::
  
          _INPUT = repeat('foo', 3)
          foo2bar = lambda word: word.replace('foo', 'bar')
          foo2baz = lambda word: word.replace('foo', 'baz')
          foo2qux = lambda word: word.replace('foo', 'quz')
          _OUTPUT = broadcast(_INPUT, foo2bar, foo2baz, foo2qux)
          _OUTPUT == repeat(('bar', 'baz', 'qux'), 3)