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)

このコードがどのように機能するかを理解するのに問題があります。これは大学からの演習として入手したもので、コードを理解するのに問題があります。

1から5までの数字の合計のようですが、何をするのか理解できませんsummation(lambda x: x, 1, lambda x: x + 1, x)

4

2 に答える 2

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))
于 2013-01-11T22:47:49.703 に答える
0

問題が発生した最後の行は、次のように記述したほうがよいでしょう。

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

それがあなたが混乱したものであるならば、ラムダはすべて互いに干渉しません。

于 2013-01-11T22:51:26.657 に答える