Python函数式迭代算法?

标签 python haskell functional-programming iteration

在 Haskell 中有一个简单的列表函数可用

iterate :: (a -> a) -> a -> [a]
iterate f x =  x : iterate f (f x)
在python中可以实现如下:
def iterate(f, init):
  while True:
    yield init
    init = f(init)
我有点惊讶,像这样的基本东西不是 functools/itertools 模块的一部分。是否可以使用这些库中提供的工具以功能样式(即没有循环)简单地构建它? (主要是打代码,尝试学习 Python 中的函数式风格。)

最佳答案

您可以使用itertools 中的一些功能来完成。 :

from itertools import accumulate, repeat

def iterate(func, initial):
    return accumulate(repeat(None), func=lambda tot, _: func(tot), initial=initial)
虽然它显然不是很干净。 Itertools 缺少一些用于构造流的基本函数,例如 unfoldr .大部分itertools函数可以定义为 unfoldr ,碰巧,但是函数式编程在 Python 中有点不舒服,所以这可能没有太大的好处。

关于Python函数式迭代算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72059380/

相关文章:

haskell - 如何使用秒差距进行 sepBy 模糊解析?

scala - 将 OOP "decorator"重构为释放 monad 结构

python - 如何使用 map 和 reduce 在 Python 中按步骤组成函数列表

python - Matplotlib:如何制作由点(圆圈)组成的虚线?

python - 从嵌套子列表返回八元组模式

python - Tkinter 标签文本在特定循环中重叠

python - 如何在url中发送批量数据?

haskell - 如何并行运行一系列独立 IO 操作?

haskell - 将 Haskell 与 Bazel 结合使用

haskell - 'many' 类型类中的“some”和 'Alternative' 函数