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


187

我正在使用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中真正删除的吗?如果是这样,还有什么选择?


3
@JBernardo,正确的工具是什么?
谢尔盖(Sergey)

Answers:



195

你可以加

from functools import reduce

在使用reduce之前。


3
先前的用户已经回答了该问题,并且答案与他的回答相同
Kathiravan Natarajan

8

或者如果您使用六个库

from six.moves import reduce

3

在这种情况下,我认为以下内容是等效的:

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

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


当重复的模运算有助于使数字保持较小时,它很有用。除非您将很多数字求和,否则求和不会产生大数,因此在这种情况下将无济于事。特别是由于不这样做,允许使用内置的sum函数,该函数的运行速度比重复应用用户定义的函数
快得多
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.