对于生成器的说明参考廖雪峰的教程,原文地址:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000
以及:https://www.jianshu.com/p/b709747d125e
生成器中通常用while True:,对此一直感到困惑,后来明白了生成器函数的运行顺序后就理解了,可以把它当作一个不断执行的中断,并且能把参数也保留到下一次计算的过程。
以下是将个人理解作为注释的代码(来自于廖雪峰的教程),执行步骤按照步骤1~9作为例子说明运行过程。
def triangles():
L = [1]
while True:
yield L
# 步骤2,步骤7
# 遇见关键字yield ,triangles挂起中断
# 返回L
# 下一次才继续执行以下代码
# 循环后再次遇见下一次的关键词,中断后返回这一次的L
G = [0] + L + [0]
L = [ G[i] + G[i + 1] for i in range(len(G) - 1) ]
# 步骤6
# return ('done')
n = 0
results = []
## g = (x * x for x in range(10))
## for n in g:
# g是generator函数循环取的例子,有10个元素全取出来
for t in triangles():
# triangles()相当于第t行计算的公式,循环n次
# 这里的循环相当于取triangles()元素的函数next()
# 步骤1,步骤5
print(t)
# 步骤3,步骤8
results.append(t)
n = n + 1
if n == 10:# 步骤4,步骤9
break # 决定退出大循环的条件,退出出生成器函数中断