from funcy import iterate, chunks def until(cond, func, *args, **kwargs): for a, b in chunks(2, iterate(func, *args, **kwargs)): if cond(a, b): return a