首页 新闻 会员 周边 捐助

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

0
悬赏园豆:10 [已解决问题] 解决于 2018-12-12 07:55
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)是什么意思?

David-lcw的主页 David-lcw | 初学一级 | 园豆:185
提问于:2018-11-28 10:32
< >
分享
最佳答案
0

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

收获园豆:10
chester·chen | 小虾三级 |园豆:507 | 2018-11-28 11:20

一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行

chester·chen | 园豆:507 (小虾三级) | 2018-11-28 11:37
其他回答(1)
0
会长 | 园豆:12463 (专家六级) | 2018-11-28 13:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册