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. 为什么输出结果会有如此的不同?
能否详细解释一下,小白万分感谢!
return [lambda x: x+i for i in range(4)]返回了[x+3, x+3, x+3, x+3]这样一个列表,但是print([x(3) for x in foo()])中的x(3)是什么意思?
第一个返回的是一个列表,元素都是匿名函数,意思就是已经执行完了for循环,i已成成了3
第二个返回一个generator生成器,循环还没没执行,等你执行的时候,i一个个赋值
应该是这样的
一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行