Usando itertools para aplicação de função recursiva

Eu preciso de uma função Pythoniterate(f, x) que cria um iterador retornando os valores x, f (x), f (f (x)), f (f (f (x))), etc (como, por exemplo,Clojure'siterate). Primeiro de tudo, eu estava pensando: isso já existe em algum lugar da biblioteca padrão e eu só estou perdendo isso? Claro que é fácil de implementar com um gerador:

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

Apenas por curiosidade: Existe uma maneira mais funcional de fazer isso em Python, por exemplo? com alguns itertools ou functools magic?

No Python 3.3 isso funcionaria

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

mas parece um abuso para mim. Posso fazer isso mais gentilmente?

questionAnswers(2)

yourAnswerToTheQuestion