生成器(generator)是一种“惰性”的算法生成器,比起列表生成式的一次性生成,他仅仅是将生成规则保存在生成器函数中(generator function),遇到next()计算并返回下一次的生成值,起到了节省内存空间的作用。
最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
下面一小段的代码遇到一个问题,百思不得其解,还请懂的师傅告知小弟原因。
Q:把每一行看做一个list,试写一个generator,不断输出下一行的list。
代码就是做这件事的。
def triangles():
L = [1]
while True:
yield L
L.append(0)
L = [L[i - 1] + L[i] for i in range(len(L))]
def main():
n = 0
results = []
for x in triangles():
print(x)
results.append(x)
n = n + 1
if n == 10:
break
if results == [
[1],
[