“pythonic”与函数式编程中的“fold”函数的等价物是什么?

在Haskell中,实现以下目标的最惯用方法是什么:

foldl(+)0[1,2,3,4,5]
--&燃气轮机;15

或其在Ruby中的等价物:

[1,2,3,4,5]。注入(0){| m,x | m+x}
#&燃气轮机;15

显然,Python提供了reduce函数,这是fold的一个实现,与上面完全相同,但是,我被告知“pythonic”编程方式是避免lambda术语和高阶函数,在可能的情况下更倾向于列表理解。因此,Python中是否有一种折叠列表或类似列表的结构的首选方法不是reduce函数,或者reduce是实现这一点的惯用方法

对数组求和的python方法是使用sum。出于其他目的,您有时可以使用reduce(来自functools模块)和操作符模块的组合,例如:

def产品(xs):
返回reduce(operator.mul,xs,1)

请注意,reduce实际上是一个foldl,用Haskell的话来说。没有特殊的语法来执行折叠,没有内置的foldr,并且实际使用reduce和非关联运算符被认为是不好的风格

使用高阶函数是非常类似于python的;它充分利用了Python的原理,即所有东西都是对象,包括函数和类。你是对的,一些蟒蛇学家不喜欢lambda,但主要是因为当它们变得复杂时,它们往往不太可读

发表评论