生成器: 一种一边循环一边计算的机制,称为生成器(generator)
。
要创建一个generator,有很多种方法:
方法一
只要把一个列表生成器的[]
改成()
,就创建了一个generator。
方法二
如果一个函数定义中包含yield
关键字,那么这个函数就不是一个普通的函数,而是一个generator。
注意:用for
循环调用generator时,拿不到generator的return
语句的返回值。如果想要拿到返回值,必须捕获StopIteration
错误,返回值包含在StopIteration
的value
中。
用生成器来实现杨辉三角。每一行看作一个list,不断的输出下一行的list:
代码实现:
def triangles():
l = [1]
while True:
yield l
l = [0] + l + [0]
l = [l[i] + l[i+1] for i in range(len(l)-1)]
n = 0
results = []
for t in triangles():
results.append(t)
n = n + 1
if n == 10:
break
for t in results:
print(t)
实现效果:
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]