通过列表生成式,我们可以直接创建一个列表。但是列表中元素过大且我们仅需访问列表中的某些元素时,列表生成式就造成了极大的资源浪费。
生成器主要通过一个yield语句与生成式区分,该语句可以将整个代码段中断,然后将一个结果传回去,然后再从中断的地方继续执行。
下面的代码段实现了一个杨辉三角:
def tag():
N=[1]
while True:
yield N
N=[1]+[N[i-1]+N[i] for i in range(len(N)-1)]+[1]
g = tag()
for t in range(6):
print(next(g))
可以看到这段代码的核心在于N=[1]+[N[i-1]+N[i] for i in range(len(N)-1)]+[1]
,N是一个list,对[1]+表示append()函数,就是在list中再添加元素,这里将杨辉三角的每一行都看成一个list,每计算出一行的元素之后,立即输出,然后在计算下一行的元素时将其覆盖。
在这里,要特别注意用python 生成器实现杨辉三角并没有用到二维数组,也并不是将数组中所有元素都计算出来之后再循环输出的。生成器是在代码执行过程中不断地向外输出值的。