【知识点摘要】:
要创建一个generator,有很多种方法。
第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
[]
()
定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
yield
要把fib函数变成generator,只需要把print(b)改为yield b就可以了:
fib
print(b)
yield b
变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
next()
请注意区分普通函数和generator函数,普通函数调用直接返回结果:
generator函数的“调用”实际返回一个generator对象:
【作业答案】:已通过测试
def triangles():
line = [1] # 第一行就一个元素1
while True:
yield line
# 生成下一行,表达式为 : [1] + 上一行的两个元素之和 + [1]
line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1]
Sign in to make a reply
用户6776087169
【知识点摘要】:
要创建一个generator,有很多种方法。
第一种方法很简单,只要把一个列表生成式的
[]
改成()
,就创建了一个generator:定义generator的另一种方法。如果一个函数定义中包含
yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator:要把
fib
函数变成generator,只需要把print(b)
改为yield b
就可以了:变成generator的函数,在每次调用
next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield
语句处继续执行。请注意区分普通函数和generator函数,普通函数调用直接返回结果:
generator函数的“调用”实际返回一个generator对象:
【作业答案】:已通过测试
def triangles():
line = [1] # 第一行就一个元素1
while True:
yield line
# 生成下一行,表达式为 : [1] + 上一行的两个元素之和 + [1]
line = [1] + [line[i] + line[i + 1] for i in range(len(line) - 1)] + [1]