1.生成器:使用生成器可以生成一个值的序列,用于迭代,并且这个值的序列不是一次生成的,而是使用一个,再生成一个,可以使程序节约大量内存。
2.生成器创建:生成器对象是通过yield关键字定义的函数对象,因此,生成器也是一个函数。
def myYield(n):
while n>0:
print("开始生成@@@@....")
yield n
print("完成生成@@@@...")
n -=1
代码自定义了一个递减数组序列的生成器,每次调用时都会产生一个从调用时所提供的初始值不断递减的数字序列。生成对象
可以直接被for遍历,也可以手动进行遍历。
if __name__ =="__main__":
for i in myYield(4):
print("遍历到的值是:",i)
my = myYield(3) #生成一个生成对象
print("已经实例化生成器对象")
my.__next__()
print("第二次调用__next__方法")
my.__next__()
2.1运行结果:
2.2yield语句是生成器中的关键语句,生成器在实例化时并不会立即执行,而是等待调用其__next__()方法才开始运行。并且当程序运行完yield语句后就会保持其当前状态且停止运行,等待下一次遍历时才恢复运行。
2.3如上图运行结果,程序运行结果中空行之后的输出“已经实例化生成器对象之前”,已经实例化了生成器,但生成器并没有运行(没有输出“开始生成”)。当第次一手动调用__next__()方法后,才输出“开始生成”,标志着生成器已经运行,而在输出“第二次调用__next__()方法:”之前并没有输出“完成一次”,说明yield语句运行之后就立即停止了。而在第二次调用__next__()方法之后,才输出“完成一次”,说明生成器的恢复运行是从yield语句之后开始运行的。
yield语句不仅可以使函数成为生成器和返回值,还可以接受调用者传来的参数。注意:第一次调用生成器时不能传递给生成器None以外的值,否则会引发错误
标签:__,调用,python,生成器,yield,生成,next From: https://www.cnblogs.com/lcc-lv/p/16658392.html