在 Haskell 中实现如下目标的最惯用的方法是什么:
foldl (+) 0 [1,2,3,4,5]
--> 15
或者 Ruby 中的等价物:
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
显然,Python 提供了reduce
函数,它是 Fold 的实现,与上面完全相同,但是,我被告知“Pythonic”编程方式是避免lambda
术语和高阶函数,尽可能首选列表推导式。因此,是否有一种在 Python 中折叠列表或类列表结构的首选方法?reduce
函数,或者是reduce
实现这一目标的惯用方法是什么?
对数组求和的 Pythonic 方法是使用sum https://docs.python.org/3/library/functions.html#sum。出于其他目的,您有时可以使用某些组合reduce https://docs.python.org/3/library/functools.html#functools.reduce(来自functools https://docs.python.org/3/howto/functional.html#the-functools-module模块)和operator https://docs.python.org/3/library/operator.html#module-operator模块,例如:
def product(xs):
return reduce(operator.mul, xs, 1)
意识到reduce
实际上是一个foldl
,用 Haskell 术语来说。没有特殊的语法来执行折叠,也没有内置的foldr
,并实际使用reduce
使用非关联运算符被认为是不好的风格。
使用高阶函数非常Pythonic;它很好地利用了Python的一切都是对象的原则,包括函数和类。你说得对,一些 Python 爱好者不喜欢 lambda,但主要是因为当它们变得复杂时,它们的可读性往往不高。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)