关于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相关问答推荐

使用pythonnet和nicegui时无法pickle December对象

如何将CSV或FDF数据解析到Python词典并注入到模板PDF表单中?

Python根据阈值对数字进行分组

如何在M x N数组的行中找到所有值的组合

错误:无法为 pyconcorde 构建轮子,这是安装基于 pyproject.toml 的项目所必需的

为什么 get_form 方法中小部件的更改没有反映 Django 管理站点中的更改

生成具有偶数个 0 和 1 的给定长度的所有二进制数

如何计算Pandas 列中每列唯一项目的出现次数?

为什么 return node.next 会返回整个链表?

为什么 numpy 的 `np.char.encode` 会将一个空的 unicode 数组变成一个空的 `float64` 数组?

为什么我不能通过索引获取字典键?

TimescaleDB:是否可以从 Python 调用create_hypertable?

如何判断一个字符串是否包含有效的 Python 代码

AttributeError:LinearRegression 对象没有属性coef_

Python configparser 不会接受没有值的键

定义 True,如果没有定义,会导致语法错误

SQLAlchemy:如果不存在则创建模式

新项目:Python 2 还是 Python 3?

Django Rest 框架 ListField 和 DictField

在 Keras 中训练神经网络的零精度