Python生成器函数和yield与from
生成器generator
- 生成器指的是生成器对象,可以由生成器表达式得到,也可以使用yield关键字得到一个生成器函数,调用这个函数得到一个生成器对象
- 生成器对象,是一个可迭代对象,是一个迭代器
- 生成器对象,是延迟计算、惰性求值
yield关键字
- yield关键字,可以中断当前函数执行。如果函数中使用了yield 那么该函数一定是一个生成器函数
生成器函数
-
定义:函数体中包含了yield关键字的函数,被称作为生成器函数。生成器函数调用后返回生成器对象。生成器函数体不会在生成器函数调用时立即执行
-
next(generator)可以获取生成器函数生成的生成器对象的下一个值
-
generator.send(arg)可以获取生成器函数生成的生成器对象的下一个值。同时,会将arg的值传递给需要获取yield返回值的对象。
- 简单示例一:
def getNum(): for i in range(5): yield i #注意当执行时遇到yield语句,就暂停该函数的执行。并将yield后面的值返回。 gnum = getNum() #生成器函数执行,会返回生成器对象。可迭代。 for i in range(6): print(next(gnum)) # 注意,如果函数体执行完成,生成器的游标走到了末尾。会报StopIteration错误
2. 简单示例二(练习使用send与yield结合):def counter(): def sol(