使用itertools进行递归函数应用

emb*_*bee 6 python iterator functional-programming generator python-itertools

我需要一个Python函数iterate(f, x),它创建一个迭代器,返回值x,f(x),f(f(x)),f(f(f(x)))等(例如,Clojure的iterate).首先,我想知道:这是否已经存在于标准库的某个地方,我只是错过了它?当然,使用生成器实现起来很容易:

def iterate(f, x):
    while True:
        yield x
        x = f(x)
Run Code Online (Sandbox Code Playgroud)

只是出于好奇:在Python中有没有更多功能性的方法来实现这一点,例如使用一些itertools或functools魔术?

在Python 3.3中,这可行

def iterate(f, x):
    return accumulate(repeat(x), lambda acc, _ : f(acc))
Run Code Online (Sandbox Code Playgroud)

但看起来像是对我的虐待.我可以更好地做到这一点吗?

Ned*_*der 5

itertools中似乎没有什么可以满足您的需求,但是itertools是一个很深的宝藏,所以我可能会错过一些东西。

您的生成器代码看起来很棒。我不知道为什么要用积累来编写它,除非您在玩荒唐的代码高尔夫游戏,或者试图打动Haskell势利小人。编写函数,使其可读,可理解和可维护。无需过于聪明。