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

Python生成器yield行为疑问:为何输出出现None?

生成器函数输出None的原因解析

先看你提供的生成器代码:

def gen(n=5):
    for i in range(n):
        n = yield n

for i in gen(3):
    print(i)

运行结果:

3
None
None

你对第一个输出3的理解没问题:调用gen(3)时,参数3赋值给函数内的n,进入for i in range(3)循环(这个循环会执行3次,因为range(3)对应0、1、2三个迭代值)。

后续两个None的具体由来:

  1. 第一次循环执行n = yield n时,先执行yield n,把当前n的3返回,这就是第一个输出。此时生成器暂停,等待外部传入值。
  2. for循环迭代生成器的机制是:每次获取yield返回的值后,会自动向生成器发送None。所以当生成器恢复执行时,yield n这个表达式的结果就是None,并被赋值给变量n。
  3. 第二次循环时,n已经是None,执行yield n就会返回None,对应第二个输出。之后for循环再次发送None给生成器,n继续被赋值为None。
  4. 第三次循环执行yield n,返回的还是None,也就是第三个输出。循环执行完3次后,生成器终止,for循环结束。

你的猜测是对的,本质就是for循环会默认给生成器发送None,这个值被赋值给了n,导致后续yield返回的都是None。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:05:25