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

如何实现生成器及理解odds生成器函数的执行逻辑?

生成器函数odds分步讲解

术语解释:遍历生成器直到耗尽产出前count个奇数

这句话可以拆解为3个核心逻辑:

  • 调用odds(count)不会立刻执行函数内部代码,只会返回一个生成器对象
  • 用for循环迭代这个生成器对象时,才会逐段执行函数逻辑:每次执行到yield关键字就会把对应的值返回给for循环,同时暂停函数运行,等待下一次迭代时从暂停位置继续执行
  • “遍历到耗尽”指生成器内部逻辑执行完毕(触发break或函数运行结束),不再产出新的值,for循环自动终止;最终你会通过for循环拿到正好count个值,也就是题目要求的前count个奇数。

代码逐逻辑拆解

先贴完整代码:

def odds(count):
    i = 1 
    while True:
        if i % 2:
            count -= 1
            yield i
            if not count:
                break
        i += 1

逐段逻辑说明:

  1. i = 1:从数字1开始遍历,符合题目要求第一个返回奇数为1的规则
  2. while True:开启无限循环,直到产出足够数量的奇数后主动终止
  3. if i % 2:判断当前i是否为奇数,奇数取模2结果为1,对应布尔值为True
  4. count -= 1:每确认一个符合要求的奇数,就把剩余需要产出的奇数数量减1
  5. yield i:把当前奇数返回给迭代器,同时暂停函数运行,等待下一次迭代触发
  6. if not count: break:当count被减到0时,说明已经产出了足够数量的奇数,终止循环,生成器耗尽
  7. i += 1:遍历下一个数字,继续判断是否符合奇数要求

count -= 1的核心作用

这个语句是控制生成器产出数量的核心逻辑:

  • 入参count代表你需要的奇数总个数,每产出一个奇数就把count减1,相当于用count记录剩余待产出的奇数数量
  • 配合后面的if not count: break逻辑,当count变为0时就终止无限循环,避免生成器永远运行下去

我们可以用count=2的场景验证运行结果:迭代生成器odds(2)会依次返回1、3,之后生成器耗尽,for循环停止,正好是前2个奇数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:57:04