【问题标题】:NameError: global name 'reduce' is not definedNameError:未定义全局名称“reduce”
【发布时间】:2012-04-30 20:49:11
【问题描述】:

我是 Python 新手。你能告诉我下面的代码有什么问题吗?当我运行它时,我收到一条错误消息“NameError:未定义全局名称'reduce'”。我问过古尔格,但没用。 :(

def main():
    def add(x,y): return x+y
    reduce(add, range(1, 11))

if __name__=='__main__':
    main()

【问题讨论】:

  • reduce 被移出内置函数的原因之一是因为它经常被用于加法,其中sum 更可取(在这种情况下,您可以只使用@987654324 @ 或 sum(xrange(1, 11)) 在 Python 2 中)。另请注意,在标准库中有一个与您的 add 等效的函数:operator.add

标签: python reduce


【解决方案1】:

我猜:

  1. 您使用的是 Python 3,并且
  2. 您正在学习专为 Python 2 设计的教程。

reduce 函数由于不常用,已从 Python 3 的内置函数中删除。它仍然在 functools 模块中可用,因此您可以这样做:

import functools

def main():
    def add(x,y): return x+y
    functools.reduce(add, range(1, 11))

【讨论】:

  • “既然不常用”是有争议的。
【解决方案2】:

还有

# Import reduce from functools
from functools import reduce

允许您像使用内置函数一样使用reduce

def main():
    def add(x,y): return x+y
    reduce(add, range(1, 11))

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2014-10-24
    • 2012-05-29
    • 2013-08-23
    • 2014-04-03
    • 2017-05-12
    • 2015-09-01
    相关资源
    最近更新 更多