求解释,万分感谢!代码及输出如下

2019-01-02 20:32发布

问题:

def foo():
    return [lambda x: x+i for i in range(4)]
print([x(3) for x in foo()])

# 输出:[6, 6, 6, 6]


def foo():
    return (lambda x: x+i for i in range(4))
print([x(3) for x in foo()])

# 输出:[3, 4, 5, 6]

1. lambda x: x+i for i in range(4)该如何理解?

2. [x(3) for x in foo()]该如何理解?

3.  为什么输出结果会有如此的不同?

能否详细解释一下,小白万分感谢!

回答1:

第一个返回的是一个列表,元素都是匿名函数,意思就是已经执行完了for循环,i已成成了3
第二个返回一个generator生成器,循环还没没执行,等你执行的时候,i一个个赋值
应该是这样的



回答2:

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000



标签: