有semi-famous article written by Guido himself暗示reduce()
应该采用渡渡鸟的方式并离开语言。它甚至被降级为Python 3中的顶级函数(instead getting stuffed in the functools
module)。
对于许多其他功能性编程主食(地图等),可以使用常见的明确替代方案。例如,大多数时候map()
更好地写为列表理解。
我想知道的是,如果存在类似“更多pythonic”替代reduce函数的话。我有一些函数式编程背景(特别是ML),因此在考虑解决方案时,reduce()
经常出现在我的脑海中,但如果有更好的方法来做到这一点(没有将reduce调用展开到一个for loop)我想知道。
答案 0 :(得分:28)
正如Guido的链接文章所说,如果你想避免reduce()
,你应该只写一个明确的for循环。您可以替换
result = reduce(function, iterable, start)
通过
result = start
for x in iterable:
result = function(result, x)
答案 1 :(得分:3)
我想知道的是,如果有一个类似“更多pythonic”替代reduce函数的话。
是和否。这取决于用例。
在链接的文章中,Guido建议大多数但不是全部的减少应该写成循环。在有限的情况下,他认为reduce
适用。
所以在我看来,reduce()的适用性几乎受到限制 关联运算符,在所有其他情况下,最好写出来 积累循环明确。
没有很多关联运算符。 (那些是 运算符X,其中(a X b)X c等于X(b X c)。)我认为是 仅限于+,*,&,|,^和快捷方式和/或。