def first(seq, predicate, default=None):
    """
    Return the first item in sequence that satisfies the callable, predicate, or
    returns the default if not found.

    :param seq:         iterable sequence of objects
    :param predicate:   callable that accepts one item from the sequence
    :param default:     value to return if not found (default is None)
    :return:            default value if no item satisfies the predicate
    """
    return next((i for i in seq if predicate(i)), default)