Python3 yield 学习

感谢博主 :

https://blog.csdn.net/u011318077/article/details/93749143

https://www.cnblogs.com/skings/p/10339866.html

1、yeild原理:

如果一个函数中包含了yield关键字,该函数就变成了生成器函数。当一条语句调用该生成器函数时,并不会真的执行该函数,而是生成一个生成器,直到对该生成器调用next()时,函数体才会真正的执行。执行函数体时,每执行到一个yield语句时,生成器函数就会中断,生成器函数的“状态”会被冻结,所有的变量的值会被保留下来,下一次要执行的代码的位置会被记录下来,并返回给调用者一个当前的迭代值下一次调用next()时,从yield记录的断点处继续执行。因此,该生成器函数就好像一个函数在正常执行的过程中,被yield中断了数次,每次中断都会通过yield返回当前的迭代值。当所有的值都被访问完成后,会抛出stopIteration异常,表示迭代完成。

在for循环里面,无需处理StopIteration异常,循环会正常结束。生成器函数一般都是通过for循环来调用,for循环自带next()

2、yield的好处是:把一个函数改写成一个generator,该函数就获得了迭代能力,比起用类的实例保存状态,来计算下一个next()的值,不仅代码简洁,而且流程异常清晰。利用迭代,减少内存消耗。

3、除next()函数外,yield生成器函数中另外一个重要的函数就是send(x),调用者可以通过该函数向生成器函数中传入一个值x。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值