如何在for循环中依次返回多个值?yield与生成器是否适用?
生成器和yield完全符合你的需求
这正是生成器的核心优势——不用提前把所有结果存进列表或字典,而是按需逐个返回值,完美匹配你的需求。
先看你原代码的问题:你用了return,函数在第一次循环时就直接返回结果并终止了,所以永远只能拿到第一个值,后面的循环根本没机会执行。
把return换成yield,你的函数就变成了生成器,能依次返回所有循环的结果:
import random def my_function(): for i in range(3): # 把return换成yield,每次循环生成一个结果 yield (dict(x=[[random.randint(0,10)]], y=[[random.randint(0,10)]]), 0)
调用生成器的方式有两种:
- 用
for循环遍历,自动依次取出每个值:
for result in my_function(): print(result)
- 用
next()函数手动逐个获取,直到抛出StopIteration表示没有更多值了:
gen = my_function() print(next(gen)) # 第一个结果 print(next(gen)) # 第二个结果 print(next(gen)) # 第三个结果
生成器的工作逻辑是:每次执行到yield时,函数会暂停并返回当前值,下次调用时从暂停的位置继续执行循环,直到循环结束。全程不会把所有结果存在内存里,完全满足你不想用列表/字典存储的要求。
内容的提问来源于stack exchange,提问作者The Governor
相关产品推荐
相关产品推荐

