关于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()的许多用法更清晰.

Python-3.x相关问答推荐

在循环访问XML中的多个层时,xml.etree.Elementree Python3解析器不起作用

我们可以在每个可以使用 Pandas Join 的用例中使用 Pandas merge 吗?

我可以设置树视图层次 struct 按钮吗?

合并所有文件并获取特定列数据

Pandas 窗口聚合两个排序表

Pandas 窗口聚合两个排序表

在 python pandas 中设置条件和分配新值

如何在pyspark的列中按连续1分组并保持具有特定大小的组

请求:RecursionError:超出最大递归深度

理解 Keras 的 ImageDataGenerator 类中的 `width_shift_range` 和 `height_shift_range` 参数

如何从同一文件夹中的模块导入功能?

sys.stdin.readline() 和 input():读取输入行时哪个更快,为什么?

使用 Sublime Text 3 在 Python 3 中打印 UTF-8

Tensorflow:ImportError:libcudnn.so.7:无法打开共享对象文件:没有这样的文件或目录

如何遍历某些扩展名的文件?

TypeError:只有整数标量数组可以转换为标量索引

map 对象不是 JSON 可序列化的

如何对字典的函数输出列表进行单元测试?

在动态链接库 Anaconda3\Library\bin\mkl_intel_thread.dll 中找不到序数 242

如何将python日志(log)级别名称转换为整数代码