python创建一个generator,有2种方法。
一是将列表生成式的[]改为()。
二是定义一个函数,并且这个函数里含有yield关键字。这个函数就是一个generator
简单的生成器可以用列表生成式生成,复杂的就写不出来了。
下面用generator的方法实现输出杨辉三角:
def triangles():
#输出列表
res_now = []
while True:
#上一个列表,用于计算当前列表
#注意必须使用copy函数,直接赋值相当于res_now的引用
res_last = res_now.copy()
#当前计算行号
level = len(res_now) + 1
#注意情况要输出的列表
res_now.clear()
if level == 1:
res_now.append(1)
else:
for index in range(level):
if index == 0 or index == level - 1:
res_now.append(1)
else:
res_now.append(res_last[index - 1] + res_last[index])
yield res_now
注意:列表拷贝必须使用copy函数。
以下是测试代码:
n = 0
results = []
for t in triangles():
print(t)
l_now = t.copy()
results.append(l_now)
n += 1
if n == 10:
break
if results == [
[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]
]:
print('测试通过!')
else:
print('测试失败!')