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? 複合函數的哪一邊我應該開始閱讀?代碼說明
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? 複合函數的哪一邊我應該開始閱讀?代碼說明
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
三次的第一次調用(三次)reuturns一個函數。爲了這個功能,你傳遞了add1函數,結果你將再次得到一個函數。如果您將6傳遞給該函數,則結果爲33。
f1 = thrice(thrice)
f2 = f1(add1)
print(f2(6))
你能解釋最後一行中的任務嗎? – Bach
這變成了一個巨大的堆棧擴展.. –
函數'三次(三次)'接受一個函數並返回合成3^3 = 27次的相同函數。因此,'三次(三次)(add1)'是一個將27加到其輸入的函數。用6返回33. – Bach