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)
我无法理解此代码的工作原理。我从大学那里得到了这个练习,我在理解代码时遇到了一些麻烦。
它似乎是1到5之间的数字之和,但无法理解summation(lambda x: x, 1, lambda x: x + 1, x)
的作用。
答案 0 :(得分:3)
我首先将这些论点分开:
lambda x: summation(lambda x: x, 1, lambda x: x + 1, x)
将这些变量替换回原始函数并简化它:
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))
答案 1 :(得分:0)
您遇到问题的最后一行可以更好地说明:
summation(lambda x: summation(lambda y: y, 1, lambda z: z + 1, x),1, lambda w: w + 1, 5)
如果你感到困惑的话,那些羔羊并不会互相干扰。