Python替代reduce()

时间:2012-02-28 00:07:40

标签: python functional-programming

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)我想知道。

2 个答案:

答案 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)。)我认为是   仅限于+,*,&,|,^和快捷方式和/或。