求解,python生成器为什么是这个结果,求告知😭😭是怎样的运行过程,看了很多遍,不太明白,希望有结果

img


求解,python生成器为什么是这个结果,求告知,怎样的运行过程,看了很多遍,不太明白,希望有结果

主要难理解的是这一句

g = ((n+i) for i in g)

它在循环的时候并没有实际生成列表,而只是记下了计算方式(类型为generator),该类型是在调用的时候再生成列表。
所以当循环结束时,g 实际上等于 (n+n+i for i in range(4))
而 n 最后的值是11,所以当后面使用list()将其转成列表时,也就是调用这个generator类的时候,再使用 (n+n+i for i in range(4)) 这个公式来生成列表,也就是 [22, 23, 24, 25]
你可以试试在最后一句print之前插入一句赋值n的语句,将n的值变成其他数字,最后打印的结果也会相应发生改变,都是 (n+n+i for i in range(4))这个公式来生成新的列表内容。
比如改成:

for n in [3, 11]:
    g = ((n+i) for i in g)
n = 6
print(list(g))

最后打印出来的就变成 [12, 13, 14, 15]

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^