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

如何在每次循环迭代后返回while循环的计数器i和b值

问题:每次循环迭代后返回while循环的计数器i和b的值

我希望在每次循环迭代后返回while循环的计数器i和b的值,以便在另一个函数中使用,但尚未找到相关实现方法。

以下是我的代码:

def dis(reps, towards, back):
    t = 0  # move towards t times
    b = 0  # move back b times
    i = 0  # repetitions
    n =  1 # counts every step
    while i < reps:
        while t < towards:
            do_something()
            i += 1
            n +=1
        while b < back:
            do_something()
            n += 1
            b += 1
        t = 0
        b = 0
        i += 1

我曾考虑添加counter_towards、counter_back这类额外变量,但仍需在每次迭代时返回这些值,无法解决问题;将相关函数加入类中或许可行,但工作量较大,希望能找到简便的解决办法。


解决方案

最简便的实现方式是用生成器(yield),不需要额外类或复杂结构,就能在每次循环迭代时返回i和b的值:

方案1:每次内层/外层循环迭代都返回值

修改后的代码如下:

def dis(reps, towards, back):
    t = 0  # move towards t times
    b = 0  # move back b times
    i = 0  # repetitions
    n =  1 # counts every step
    while i < reps:
        while t < towards:
            do_something()
            i += 1
            n +=1
            # 每次towards循环迭代后返回当前i和b
            yield (i, b)
        while b < back:
            do_something()
            n += 1
            b += 1
            # 每次back循环迭代后返回当前i和b
            yield (i, b)
        t = 0
        b = 0
        i += 1
        # 每次外层循环结束后返回当前i和b
        yield (i, b)

在另一个函数中调用的方式:

def another_func():
    # 遍历生成器,逐个获取每次迭代的i和b
    for current_i, current_b in dis(5, 3, 2):
        # 这里处理拿到的i和b值,比如打印或参与计算
        print(f"当前i: {current_i}, 当前b: {current_b}")

方案2:仅外层循环迭代后返回值

如果只需要外层while循环完成一轮后的i和b,只需把yield放在外层循环末尾:

def dis(reps, towards, back):
    t = 0  # move towards t times
    b = 0  # move back b times
    i = 0  # repetitions
    n =  1 # counts every step
    while i < reps:
        while t < towards:
            do_something()
            i += 1
            n +=1
        while b < back:
            do_something()
            n += 1
            b += 1
        t = 0
        b = 0
        i += 1
        # 仅外层循环迭代后返回i和b
        yield (i, b)

这种方式完全不需要改动原有代码结构,也不用额外变量,直接满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:35:37