关键词“yield”与简单生成器(simple generator)

这篇文章通篇是对PEP-0255的总结,没有遗漏重点。

  1. “yield”语句只可以出现在函数中。
  2. 一个包含“yield”语句的函数叫做生成器函数(generator function)。
  3. 生成器函数被调用时,函数体的代码不会被执行,返回一个生成器-迭代器对象(generator-iterator)。
  4. 生成器-迭代器对象遵守iterator protocol
  5. 每一次生成器-迭代器的__next__()方法被调用,生成器函数体中的代码被执行,直到遇到“yield”“return”语句,或者到达函数体的末尾。
  6. 如果运行时yield expression_list被遇到,函数状态被冻结expression_list的值被返回给__next__()方法的调用者。
  7. 所谓“冻结”,指的是所有本地状态被保存,包括当前绑定的本地变量,指令指针,以及内部估值栈(internal evaluation stack):足够的信息被保存,以至于下次__next__()方法被调用时函数会按照“yield”语句是外部调用进行。
  8. “yield”语句不允许出现在try/except结构的“try”子句中;生成器不能在正在运行时被恢复(resumed)。
  9. 运行时当return被遇到,StopIteration异常会被提起,表示迭代器被中止;当迭代器寿终正寝时同样的异常也会被提起。
  10. 如果生成器函数中出现一个未处理的异常,该异常会被传递给调用者,之后对生成器函数进行恢复的尝试都会失败,提起StopIteration异常。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值