def tee(*funcs, name=None, doc=None):
    """Create a function which broadcasts all arguments it receives to a list of "sub-functions".
    The return value of the tee function is a generator expression containing the return values
    of the individual sub-functions.

        T = func.tee(f, g, h)
        T(x)  # equivalent to...  [f(x), g(x), h(x)] (as a generator expression, not a list!)

    The name and docstring of the newly created function can be given through the 'name' and
    'doc' keyword-only arguments.
    """
    def tee_func(*args, **kwargs):
        return (func(*args, **kwargs) for func in funcs)

    tee_func.__name__ = name or "tee({})".format(", ".join(f.__name__ for f in funcs))
    tee_func.__doc__ = doc
    return tee_func