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

Python生成器yield搭配random使用时索引不递增的修复方法

问题根因

你每次执行next(wdg())都会重新创建一个全新的生成器实例,每个生成器默认从循环的第一轮(i=0)开始执行,所以每次返回的字典a的值固定为0,只有b是新生成的随机数。

修复方案

  1. 先补全缺失的random模块导入语句
  2. 提前把生成器实例赋值给一个变量,再对这个变量反复调用next(),就能按顺序拿到i从0到4的结果
  3. 如果要一次性获取所有5个字典,直接用list()包裹生成器实例即可

修复后代码示例

分步调用写法

import random

def wdg():
    for i in range(5):
        c = random.randint(0,5)
        yield {'a':i,'b':c}

# 先创建生成器实例存储到变量中
gen = wdg()
# 对同一个生成器实例重复调用next
print(next(gen)) # 输出 {'a':0, 'b': 随机数}
print(next(gen)) # 输出 {'a':1, 'b': 随机数}
print(next(gen)) # 输出 {'a':2, 'b': 随机数}
# 累计调用5次后会抛出StopIteration异常,代表生成器迭代结束

一次性获取所有结果写法

import random

def wdg():
    for i in range(5):
        c = random.randint(0,5)
        yield {'a':i,'b':c}

res = list(wdg())
print(res)
# 输出示例:[{'a': 0, 'b': 3}, {'a': 1, 'b': 5}, {'a': 2, 'b': 0}, {'a': 3, 'b': 2}, {'a': 4, 'b': 4}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:27:00