关于python 3.0中reduce()函数的更改以及如何删除,网上似乎有很多热烈的讨论.我很难理解为什么会这样;我觉得在各种情况下使用它是很合理的.如果这种蔑视仅仅是主观的,我无法想象有这么多人会关心它.
我错过了什么?reduce()有什么问题?
关于python 3.0中reduce()函数的更改以及如何删除,网上似乎有很多热烈的讨论.我很难理解为什么会这样;我觉得在各种情况下使用它是很合理的.如果这种蔑视仅仅是主观的,我无法想象有这么多人会关心它.
我错过了什么?reduce()有什么问题?
正如圭多在他的The fate of reduce() in Python 3000篇博文中所说:
所以现在减少().这实际上是我最讨厌的一个,因为除了一些涉及+或*的例子之外,几乎每次我看到一个带有非平凡函数参数的reduce()调用,我都需要抓起纸笔来绘制实际输入到该函数中的内容,然后我才明白reduce()应该做什么.所以在我看来,reduce()的适用性几乎局限于关联运算符,在所有其他情况下,最好显式写出累加循环.
Functional Programming HOWTO篇文章中有一个令人困惑的reduce
的极好例子:
快点,下面的代码在做什么?
total = reduce(lambda a, b: (0, a[1] + b[1]), items)[1]
你可以弄明白,但要解开这个表达式需要时间
def combine (a, b): return 0, a[1] + b[1] total = reduce(combine, items)[1]
但如果我只是简单地使用for循环,那将是最好的:
total = 0 for a, b in items: total += b
或内置的sum()和生成器表达式:
total = sum(b for a,b in items)
当编写循环时,reduce()的许多用法更清晰.