Usando itertools para la aplicación de la función recursiva

Necesito una función de Pythoniterate(f, x) que crea un iterador que devuelve los valores x, f (x), f (f (x)), f (f (f (x))), etc. (como, por ejemplo,De Clojureiterate). En primer lugar, me preguntaba: ¿esto ya existe en algún lugar de la biblioteca estándar y solo me lo estoy perdiendo? Por supuesto, es bastante fácil de implementar con un generador:

def iterate(f, x):
    while True:
        yield x
        x = f(x)

Solo por curiosidad: ¿hay una forma más funcional de hacerlo en Python, por ejemplo? ¿Con algunos itertools o functools magic?

En Python 3.3 esto funcionaría

def iterate(f, x):
    return accumulate(repeat(x), lambda acc, _ : f(acc))

Pero me parece un abuso. ¿Puedo hacer esto más bien?

Respuestas a la pregunta(2)

Su respuesta a la pregunta