代码说明

时间:2014-02-06 12:45:29

标签: python functional-programming composite

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

def thrice(f):
    return compose(f, compose(f, f))

add1 = lambda x: x + 1


print(thrice(thrice)(add1)(6)) = 33

任何人都可以向我解释为什么这是33? 我应该开始阅读复合函数的哪一边?

2 个答案:

答案 0 :(得分:1)

1)在数学方面,compose(f, g) = f ∘ g

2)然后thrice(f) = f ∘ f ∘ f

3)然后T := thrice(thrice) = thrice ∘ thrice ∘ thrice

4)然后T(f) = f ∘ f ∘ f ∘ f ∘ f ∘ ...#27次

5)然后thrice(thrice)(add1) = T(add1) = add1 ∘ add1 ∘ ...#27次

6)然后thrice(thrice(add1))(x) = x + 27

答案 1 :(得分:0)

第一次调用三次(三次)重新启动一个函数。对于该函数,您传递add1函数,因此您将再次获得一个函数。如果你将6传递给该函数,你将得到33作为结果。

f1 = thrice(thrice)
f2 = f1(add1)
print(f2(6))