You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python生成器在执行print(x)后仍会yield值?

理解Python生成器中send()与yield的执行流程

我们一步步拆解代码的执行过程,就能明白输出的由来:

  1. 第一次调用next(s)

    • 生成器启动,进入for i in range(5)循环,此时i=0
    • 执行x = yield i:yield先返回0,生成器暂停在这一行(此时还没给x完成赋值)
    • 外部print(next(s))输出0
  2. 调用s.send(15)

    • 生成器从暂停的x = yield i处恢复,把send传入的15赋值给x
    • 执行print(x),输出15
    • 循环继续,i变为1,再次执行x = yield i:yield返回1,生成器再次暂停
    • 外部print(s.send(15))输出这个yield返回的1

简单说:send()的作用分两步——先把传入的值赋值给yield左侧的变量,再让生成器继续执行到下一个yield语句,并返回该yield的结果。你看到的15是生成器内部print(x)的输出,1是send()方法返回的下一个yield的结果。

内容的提问来源于stack exchange,提问作者Ice Cube

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:33:31