如何在Python自定义函数的while循环中迭代返回值且不中断循环?
解决方法:使用生成器(yield)
你可以用Python的生成器来实现每次迭代返回值的需求,把return替换成yield即可。yield不会直接终止函数,而是返回当前值并暂停函数执行,下次调用时会从暂停的位置继续运行循环。
修改后的代码
def func(x): n = 3 while n > 0: x = x + 1 yield x # 用yield替代return,实现迭代返回 n -= 1 # 必须递减n,避免无限循环
调用生成器的方式
- 用for循环遍历所有返回值:
for result in func(6): print(result)
输出结果:
7 8 9
- 一次性获取所有结果(转为列表):
results = list(func(6)) print(results) # 输出 [7, 8, 9]
- 逐个获取结果(用next()):
gen = func(6) print(next(gen)) # 7 print(next(gen)) # 8 print(next(gen)) # 9
关键说明
- 原代码除了
return会终止循环外,还缺少n -= 1的逻辑,若没被return打断会陷入无限循环,修改时必须补上这一步。 - 生成器函数调用后不会立即执行,只有在迭代(比如for循环、next()调用)时才会逐步执行循环体。
内容的提问来源于stack exchange,提问作者stuck overflawed
相关产品推荐
相关产品推荐

