jer*_*emy 65 python python-3.x
网上似乎有很多关于python 3.0中reduce()函数更改以及如何删除它的讨论.我有点难以理解为什么会这样; 我发现在各种情况下使用它是相当合理的.如果蔑视只是主观的,我无法想象会有这么多人关心它.
我错过了什么?reduce()有什么问题?
Dzi*_*inX 68
正如Guido所说,他在Python 3000帖子中的reduce()的命运:
所以现在减少().这实际上是我一直非常讨厌的那个,因为除了几个涉及+或*的例子之外,几乎每当我看到一个带有非平凡函数参数的reduce()调用时,我都需要抓笔和纸来在我理解reduce()应该做什么之前,图表实际上被输入到该函数中的是什么.所以在我看来,reduce()的适用性几乎仅限于关联运算符,在所有其他情况下,最好明确地写出累积循环.
这里是一个令人困惑的一个很好的例子reduce中的函数式编程HOWTO文章:
快,下面的代码是做什么的?
Run Code Online (Sandbox Code Playgroud)total = reduce(lambda a, b: (0, a[1] + b[1]), items)[1]你可以搞清楚,但是需要时间来解开表达式来弄清楚发生了什么.使用简短的嵌套def语句可以使事情变得更好:
Run Code Online (Sandbox Code Playgroud)def combine (a, b): return 0, a[1] + b[1] total = reduce(combine, items)[1]但如果我只使用for循环,那将是最好的:
Run Code Online (Sandbox Code Playgroud)total = 0 for a, b in items: total += b或者sum()内置和生成器表达式:
Run Code Online (Sandbox Code Playgroud)total = sum(b for a,b in items)当写为for循环时,reduce()的许多用法都更清晰.
Joh*_*kin 35
reduce()没有删除 - 它只是被移动到functools模块中.Guido的推理是,除了像求和这样的简单案例之外,使用的代码reduce()在写为累积循环时通常更清晰.
| 归档时间: |
|
| 查看次数: |
19267 次 |
| 最近记录: |