def coroutine(func):
    """Coroutine decorator: instantiate object, proceed to first yield statement.

    :param func: coroutine function
    :returns: cr
    :rtype: coroutine object
    """
    def start(*args, **kwargs):
        cr = func(*args, **kwargs)
        cr.next()
        return cr
    return start