Python代码未引发错误,但所需的输出不相同

时间:2019-06-24 10:43:46

标签: python-3.x

无法接收python代码的输出。我尝试通过打印每一行来调试代码

def get_sum_metrics(predictions, metrics=[]):  
    for i in range(0,3):
        metrics.append(lambda x:x+i)

    sum_metrics = 0
    for metric in metrics:
        sum_metrics += metric(predictions)

    return sum_metrics

def main():
    print(get_sum_metrics(0))
    print(get_sum_metrics(1))
    print(get_sum_metrics(2))
    print(get_sum_metrics(3,[lambda x:x]))
    print(get_sum_metrics(0))
    print(get_sum_metrics(1))
    print(get_sum_metrics(2))


if __name__=='__main__':
    main()

预期的输出应该是             3             6             9             15             3             6             9

        but getting..
        6
        18
        36
        18
        24
        45
        72

1 个答案:

答案 0 :(得分:0)

您的问题与mutable default argumentsthis question所示的循环创建lambda的问题有关。

这两个固定的问题为您提供了

def get_sum_metrics(predictions, metrics=None):
    if metrics is None:
        metrics = []  
    for i in range(0,3):
        f = lambda x, i=i: x+i
        metrics.append(f)
    sum_metrics = 0
    for metric in metrics:
        sum_metrics += metric(predictions)
    return sum_metrics