2013-01-11 51 views
1
def summation(calc_termo, linf, prox, lsup): 
    soma = 0 
    while linf <= lsup: 
     soma = soma + calc_termo(linf) 
     linf = prox(linf) 
    return soma 
summation(lambda x: summation(lambda x: x, 1, lambda x: x + 1, x),1, lambda x: x + 1, 5) 

我很難理解這段代碼如何工作。我從大學那裏獲得了這個練習,並且在理解代碼時遇到了一些麻煩。Lambda和Python Python

它似乎是1到5之間的數字的總和,但不能理解summation(lambda x: x, 1, lambda x: x + 1, x)做什麼。

回答

3

我想通過採取這些參數除了啓動:

lambda x: summation(lambda x: x, 1, lambda x: x + 1, x) 

替代這些變量回到原來的功能,簡化IT:

def inner_function(x): 
    soma = 0 
    linf = 1 

    while linf <= x: 
     soma += linf + 1 
     linf += 1 

    return soma 

簡化多了幾分:

def inner_function(x): 
    soma = 0 

    for linf in range(1, x + 1): 
     soma += linf 

    return soma 

還有一點點:

inner_function = lambda x: sum(range(1, x + 1)) 

而且一些:

inner_function = lambda x: x * (x + 1)/2 

現在你原來的功能就變成了:

def summation(calc_termo, linf, prox, lsup): 
    soma = 0 

    while linf <= lsup: 
     soma = soma + calc_termo(linf) 
     linf = prox(linf) 

    return soma 

summation(inner_function, 1, lambda x: x + 1, 5) 

或者:

def summation(linf, prox, lsup): 
    soma = 0 

    while linf <= lsup: 
     soma = soma + linf * (linf + 1)/2 
     linf = prox(linf) 

    return soma 

summation(1, lambda x: x + 1, 5) 

你可以把它從那裏。我:

summation = lambda: sum(n * (n + 1)/2 for n in range(6)) 

等於:

sum(sum(range(n + 1)) for n in range(6)) 
+0

謝謝你的幫助,這真的很有幫助我現在可以更好地理解它 –

0

,你遇到了麻煩,最後一行有可能更好地表述爲:

summation(lambda x: summation(lambda y: y, 1, lambda z: z + 1, x),1, lambda w: w + 1, 5) 

的lambda表達式並不都干擾如果這是你感到困惑的話。