求大佬解答
Topic source因为在前面yield 的是L这个变量
L.append L.assert L.extend 函数都不修改L的id
在第二次进入generator的时候 L.append(0)会修改之前的L (也就是iteration里面的t)
但是最后一行的赋值操作修改了L的id 所以不会发生变化了
具体的你可以debug一下 就很明显了
借楼一用!
我用debug测试了下,发现生成器返回的结果是正确的,但是在for循环打印的时候出错了,
发现问题出在了 append() 这个内置函数上,生成器返回结果传给变量t,调用append()添加的时候,他没有使用变量t 的指向,而是指向了生成器中中间产生的列表:验证代码如下:
def triangles(): a = [1] while 1: yield a # 复制列表 此处a 替换为a[:] 后,循环添加到新列表中结果也符合要求,这个原因,请各位大神帮我解释? a.append(0) # 先进行补位,补位为0,也只能为零 a = [a[i-1] + a[i] for i in range(0, len(a))] # 列表生成式
n = 0
for t in triangles():
print(t)
n += 1
if n == 10:
break
# 以下代码需要替换后结果才正确
n = 0
results = []
for t in triangles():
results.append(t)
n = n + 1
if n == 10:
break
for t in results:
print(t)
- 1
用户6155836822
为啥这个前几行的结果 后面多加了个0啊
5行时输出如下:
[1, 1, 0]
[1, 2, 1, 0]
[1, 3, 3, 1, 0]
[1, 4, 6, 4, 1, 0]
[1, 5, 10, 10, 5, 1]