详解python中的yield(生成器)

1.yield与return的异同点

相同:都可以返回函数执行的结果
不同点:

  1. return是用来返回具体的某个值。
    yield一般与循环一起用,被称之生成器(generator),然后在这个生成器里面存放了每次循环以后的值,并且就在那放着,不输出也不返回,等你下次需要他的时候直接取出调用,相当于使得函数暂停。
  2. return返回之后停止,后面的就不在输出。
    yield返回之后接着运行后面的东西。

总之,我们可以把yield就想成return,只是停止之后记住了这个返回的位置,下次还可以拿出来继续调用。

2.yield使用的好处

在处理非常大的数据集合时,最主要的好处就是省内存。

3.具体实例理解生成器的用法

实例一

代码:

#coding=utf-8

def gen():
#定义一个函数取值为1,2,3,4
    for i in range(1, 5):

        yield i
        print()

#g为上面的生成器
g = gen()
#程序运行到yield就暂停,等待下一个next
print(next(g))
print(next(g))
print(next(g))
#send是往生成器里面传的值,最后打出也是这个值
print(g.send(4))

运行结果:
在这里插入图片描述

实例二

代码:



def list():
    stars = []
    while True:
        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宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

实例三

代码:




def generator_two():
    while True:
        x = yield
        print("value:", x)
#g为上面的生成器
g = generator_two()
#程序运行到yield就暂停,等待下一个next
next(g)
#给yield传送值1,yield再将1传给x,继续下一次循环,停在yeild处
g.send(1)
#给yeild传送值2,yield再将2传给x,继续下一次循环,停在yeild处
g.send(2)
#没有给yield传值,打印输出None,继续停在yield处,等待下一个next
next(g)


运行结果
在这里插入图片描述

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值