在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,但主要是因为当它们变得复杂时,它们往往不太可读