如何在每次循环迭代后返回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
相关产品推荐
相关产品推荐

