详细解释Python中yield关键字的用法

看了很多博客,都没有讲清楚。

首先yield关键字的功能与return完全相同,就是返回表达式的值。

当一个python函数中包含了yield关键字时,该函数就自动变成了一个生成器函数。生成器函数和普通函数的区别在于:

  • 生成器函数在调用时不会执行;
  • 生成器函数的执行可以通过函数 next() 和 func_name.send() 控制;
  • 生成器函数是迭代器,可以迭代地生成yield返回的值。

话不多说,直接上案例:

我们以单步执行的方式解释以上代码的执行过程:

  1. 由于函数gen()函数包含了yield关键字,该函数识别为生成器函数;
  2. 第7行调用了gen(),但生成器函数在调用时不会执行,所以什么都没发生;
  3. 第8行将gen()传给了对象g;
  4. 第9行next(g)开始执行函数g,执行到第一次出现yield关键字为止,并返回yield后面的数值123;
  5. 第11行next(g)从上一次结束的地方继续执行函数g。这里要注意,由于数值123被yield返回了,因此对象result并没有被赋值,print(result)显示为None。由于在while循环中,函数g会执行至再次遇见yield关键字为止,并返回yield后面的数值123;
  6. 第13行调用了生成器函数的send()方法。这里数值456被传递给上次停止时yield关键字的位置,于是对象result被赋值,print(result)显示为456。由于send()方法包括了next(),于是函数g会执行至再次遇见yield关键字为止,并返回yield后面的数值123。

通过以上解释,yield关键字的作用非常清楚了:其功能就是类似return关键字,返回其后的表达式。同时yield担任了截断点,用户可通过next()函数控制生成器函数在相邻截断点间的执行过程。因此,生成器函数的定义体中通常都有循环,next()函数控制循环进程,send()函数负责更新循环体内对象的取值。

上面也提到,生成器函数也是迭代器,于是我们就可以像正常迭代器一样使用它,yield关键字负责返回取值,如下所示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值