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?