Python上的高阶函数

时间:2018-02-17 02:52:42

标签: python higher-order-functions

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

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)

2 个答案:

答案 0 :(得分:1)

这是一种有趣的添加方式。它运作得很好,你只是错过了一件事。 Repeated返回一个函数,它将给出总和,而不是总和本身。因此,您只需在repeated(add1, y)上拨打x,就像这样

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

其余代码工作正常。

答案 1 :(得分:1)

详细信息是plus返回一个函数,这就是您看到函数名称而不是数值的原因。我认为这就是x中存在plus参数的原因。只需将此行代码更改为

即可
return repeated(add1, y)(x)

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

所以使用

plus(5, 1)

>> 6