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?