【问题标题】:Higher Order Functions on PythonPython 上的高阶函数
【发布时间】:2018-02-17 02:52:42
【问题描述】:

给了我一个函数列表,并要求我用add1 和repeated 定义plus(x,y)。 plus 是一个接受两个数字并返回总数的函数。但是,我的定义无法获得任何输出。它只是给出函数的名称。任何帮助表示赞赏!

add1 = lambda x: x + 1

def compose(f, g):
return lambda x: f(g(x))

def repeated(f, n):
    if n == 0:
        return lambda x: x
    else:
        return compose(f, repeated(f, n - 1)) 

def plus(x, y):
    return repeated(add1, y)

【问题讨论】:

  • 你能展示一下你是如何使用这些函数的吗?
  • x 在plus 中用在哪里?
  • 测试用例为 plus() 任意两个整数,plus(1,3), plus(2,5) 等。

标签: python higher-order-functions


【解决方案1】:

这是一种有趣的加法方式。它工作得很好,你只是错过了一件事。 Repeated 返回一个函数,它将给出总和,而不是总和本身。所以你只需要像这样在x上打电话给repeated(add1, y)

def plus(x, y):
    return repeated(add1, y)(x)

其余代码工作正常。

【讨论】:

    【解决方案2】:

    详细信息是plus 返回一个函数,这就是为什么您会看到函数的名称而不是数值的原因。我认为这就是为什么plus 中有x 参数的原因。把这行代码改成

    return repeated(add1, y)(x)
    

    这将使用 x 中的值评估 repeated 的返回函数。

    所以使用

    plus(5, 1)

    >> 6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 2016-05-07
      相关资源
      最近更新 更多