关于Python 3.0中reduce()函数的变化以及如何删除它,网上似乎有很多激烈的讨论。我有点难以理解为什么会出现这种情况;我发现在各种情况下使用它是相当合理的。如果这种蔑视只是主观的,我无法想象会有这么多人关心它。
我缺少什么?减少()有什么问题?
正如吉多在他的书中所说Python 3000中reduce()的命运 post:
所以现在减少()。这实际上是我一直最讨厌的,因为除了一些涉及 + 或 * 的例子之外,几乎每次我看到带有非平凡函数参数的 reduce() 调用时,我都需要拿起笔和纸来在我理解 reduce() 应该做什么之前,先画出实际输入到该函数中的内容。因此,在我看来,reduce() 的适用性几乎仅限于关联运算符,在所有其他情况下,最好明确地写出累积循环。
有一个令人困惑的绝佳例子reduce
in the 函数式编程指南文章:
快点,下面的代码在做什么?
total = reduce(lambda a, b: (0, a[1] + b[1]), items)[1]
你可以弄清楚,但是需要时间来理清表达式才能弄清楚
这是怎么回事。使用简短的嵌套 def 语句会让事情变得更好一些:
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)
当编写为 for 循环时,reduce() 的许多用法会更加清晰。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)