【问题标题】:NameError: name 'reduce' is not defined in PythonNameError:名称“reduce”未在 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 中被删除了吗?如果是这样的话,还有什么办法呢?

【问题讨论】:

    标签: python 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)
        • 这应该是核心语言
        猜你喜欢
        • 2012-04-30
        • 2013-01-26
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        相关资源
        最近更新 更多