【问题标题】:Lambdas and sums PythonLambda 和求和 Python
【发布时间】:2013-01-11 22:22:00
【问题描述】:
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)是干什么的。

【问题讨论】:

    标签: python-3.x lambda


    【解决方案1】:

    我先把这些论点分开:

    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))
    

    【讨论】:

    • 感谢您的帮助,这真的很有帮助,我现在可以更好地理解它了
    【解决方案2】:

    您遇到问题的最后一行最好表述为:

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

    如果您对此感到困惑,那么 lambda 并不都会相互干扰。

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 2018-10-04
      • 2014-08-25
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      相关资源
      最近更新 更多