python的生成器,通过生成器生成杨辉三角。看到其中一个同学评论区的答案,有些地方不能理解(他写的没有注释,难为大家了)
def triangles():
L=[1]
yield L
L1=L
n=1
while True:
L = []
L.append(1)
for i in range(1,n):
L.append(L1[i-1]+L1[i])
L.append(1)
yield L
L1=L
n=n+1
return 'done'
for i in triangles(5)
print(i)
问题1:L1=L 这个赋值有意义吗?
问题2:对于generator函数的理解,如以下代码:
def triangel(n):
L=[1] #定义一个list[1]
while True:
yield L #打印出该list
L=[L[x]+L[x+1] for x in range(len(L)-1)] #计算下一行中间的值(除去两边的1)
L.insert(0,1) #在开头插入1
L.append(1) #在结尾添加1
if len(L)>10: #仅输出10行
break
for i in triangel(5):
print(i)
函数里面有一个 while true 想要break 需要len(L)>10,但是我们输入n=5,同样可以退出循环。
因为本人对generator函数比较浅,只知道在generator函数里,遇到yield 会像return返回,下次执行再从yield下面执行。
那么这个n=5是怎么限制while true继续执行呢?(已解决)
若第八行改成 if len(L)>n 可以去控制while true 退出循环,那么第一个代码怎么控制的呢?
谢谢大家,函数理解不够。比较困惑。