2015-10-07 72 views
0

謝謝大家。我發現我無法在互聯網上發佈我的問題。如何在Python中使用lambda迭代

但是,這對我真的很有幫助。

+1

有什麼代碼可以顯示嗎? – idjaw

+3

我感覺到[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – TigerhawkT3

回答

4

撰寫將需要3個參數:編寫函數,編寫它的次數和初始參數。所以如果你想評估f(f(f(7))),你可以調用compose(f,3,7)。

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

我想到這可能不是你想要的。也許你想能夠寫g = compose(f, 3),然後致電g(7)。這隻需要稍作修改:

def compose(g, m): 
    def composer(f, n, x): 
     if n == 0: return x 
     return compose(f, n-1, f(x)) 
    return lambda x: composer(g, m, x) 
1

我不知道我是否理解正確,但我相信你期望compose()返回一個函數。在這種情況下,這會工作:

def compose(f, n): 
    def composed_f(x): 
     result = x 

     for i in range(n): 
     result = f(result) 
     return result 

    return composed_f 

所以,如果你寫:

a = compose((lambda x:x*2), 5) 
print a(1) 

你會得到32

0

使用saulspatz的撰寫和拉姆達

cubed = lambda x: x**3 

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

print(compose(cubed,2,2)) 

512 
0

雖然這可以使用遞歸簡潔地實現,迭代解決方案更高效,並且不會因0的大值而中斷。

def compose(f, n): 
    def iterated_f(x): 
     rv = x 
     while n > 0: 
      rv = f(rv) 
     return rv 
    return iterated_f