1.yield与return的异同点
相同:都可以返回函数执行的结果
不同点:
- return是用来返回具体的某个值。
yield一般与循环一起用,被称之生成器(generator),然后在这个生成器里面存放了每次循环以后的值,并且就在那放着,不输出也不返回,等你下次需要他的时候直接取出调用,相当于使得函数暂停。 - return返回之后停止,后面的就不在输出。
yield返回之后接着运行后面的东西。
总之,我们可以把yield就想成return,只是停止之后记住了这个返回的位置,下次还可以拿出来继续调用。
2.yield使用的好处
在处理非常大的数据集合时,最主要的好处就是省内存。
3.具体实例理解生成器的用法
实例一
代码:
#coding=utf-8defgen():#定义一个函数取值为1,2,3,4for iinrange(1,5):yield iprint()#g为上面的生成器
g= gen()#程序运行到yield就暂停,等待下一个nextprint(next(g))print(next(g))print(next(g))#send是往生成器里面传的值,最后打出也是这个值print(g.send(4))
运行结果:
实例二
代码:
deflist():
stars=[]whileTrue:
names=yield stars
stars.append(names)print("你最喜欢的明星是", names)#g为上面的生成器
g=list()#开启生成器next(g)print(g.send("周杰伦"))print(g.send("胡歌"))print(g.send("古力娜扎"))
运行结果:
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)
实例三
代码:
defgenerator_two():whileTrue:
x=yieldprint("value:", x)#g为上面的生成器
g= generator_two()#程序运行到yield就暂停,等待下一个nextnext(g)#给yield传送值1,yield再将1传给x,继续下一次循环,停在yeild处
g.send(1)#给yeild传送值2,yield再将2传给x,继续下一次循环,停在yeild处
g.send(2)#没有给yield传值,打印输出None,继续停在yield处,等待下一个nextnext(g)
运行结果
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)