python 生成器 杨辉三角形代码注解

对于生成器的说明参考廖雪峰的教程,原文地址: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 # 决定退出大循环的条件,退出出生成器函数中断

 

你可能感兴趣的:(python)