NameError:名称“reduce”未在 Python 中定义

Posted

技术标签:

【中文标题】NameError:名称“reduce”未在 Python 中定义【英文标题】:NameError: name 'reduce' is not defined in Python 【发布时间】:2012-01-31 03:07:26 【问题描述】:

我正在使用 Python 3.2。试过这个:

xor = lambda x,y: (x+y)%2
l = reduce(xor, [1,2,3,4])

并得到以下错误:

l = reduce(xor, [1,2,3,4])
NameError: name 'reduce' is not defined

尝试将reduce 打印到交互式控制台中 - 收到此错误:

NameError: name 'reduce' is not defined

reduce 真的在 Python 3.2 中被删除了吗?如果是这样的话,还有什么办法呢?

【问题讨论】:

【参考方案1】:

你需要从functoolspython包安装和导入reduce

【讨论】:

【参考方案2】:

或者如果你使用六库

from six.moves import reduce

【讨论】:

【参考方案3】:

你可以添加

from functools import reduce

在使用 reduce 之前。

【讨论】:

上一个用户已经回答了问题,答案和他的回答一样【参考方案4】:

在这种情况下,我认为以下是等价的:

l = sum([1,2,3,4]) % 2

唯一的问题是它会创建大数字,但也许这比重复的模运算更好?

【讨论】:

重复模运算有助于保持数字较小。除非你对很多数字求和,否则对数字求和不会产生大数字,所以在这种情况下它不会有帮助。特别是因为不这样做允许使用内置的 sum 函数,这将比重复应用用户定义的函数运行得更快【参考方案5】:

已移至functools

【讨论】:

@julio.alegria:因为Guido hates it. @IgnacioVazquez-Abrams 中引用的文章对如何以更易读的方式编写大多数案例提出了一些非常好的观点。对我来说,就是写sum(item['key'] for item in list_of_dicts) 这应该是核心语言

以上是关于NameError:名称“reduce”未在 Python 中定义的主要内容,如果未能解决你的问题,请参考以下文章

错误NameError:名称'head'未在jupyter笔记本上定义

NameError:名称“TypeError”未在 Apache 日志中定义

数组名称未在 python NameError 中定义

kernprof.py:NameError:未定义名称'profile'

NameError:未定义全局名称

NameError:名称“转子”未定义