Używanie itertools do aplikacji z funkcją rekurencyjną

Potrzebuję funkcji Pythonaiterate(f, x) który tworzy iterator zwracający wartości x, f (x), f (f (x)), f (f (f (x))) itp. (np. np.Clojure'siterate). Przede wszystkim zastanawiałem się: czy to już istnieje gdzieś w standardowej bibliotece i brakuje mi go tylko? Oczywiście łatwo jest wdrożyć z generatorem:

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

Po prostu z ciekawości: czy istnieje bardziej funkcjonalny sposób na zrobienie tego w Pythonie, np. z magią itertools lub functools?

W Pythonie 3.3 to działa

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

ale dla mnie wygląda na nadużycie. Czy mogę to zrobić lepiej?

questionAnswers(2)

yourAnswerToTheQuestion