如何在循环中迭代调用自定义函数 满足终止条件后执行后续命令
问题原因
你原有写法的核心问题是:for循环启动时已经基于初始的List_new生成了固定的迭代器,后续你在循环内重新调用myfunction()给List_new赋值,也不会改变当前正在遍历的迭代对象,所以没法实现刷新列表重新遍历的效果。
实现方案
方案1:先校验列表有效性,再统一处理(推荐,逻辑更清晰)
先通过外层循环反复获取List_new,直到所有元素都符合你的判断条件,再统一执行后续处理逻辑,示例代码如下:
# 可选:增加重试次数限制,避免死循环 MAX_RETRY = 10 retry_count = 0 while retry_count < MAX_RETRY: List_new = myfunction() retry_count += 1 # 校验当前列表所有元素是否符合要求 is_valid = True for item in List_new: # 替换为你的实际判断条件 if not 你的判断条件: is_valid = False break if is_valid: break else: # 超过重试次数仍未获取到有效列表,可根据需求做异常处理 raise Exception("多次调用myfunction仍未获得符合要求的列表") # 到此处List_new已全部符合要求,直接执行后续处理即可 for item in List_new: # 替换为你的实际执行命令 执行对应操作
方案2:边遍历边校验,遇到无效元素立刻刷新列表
如果你的业务逻辑允许处理部分元素后再刷新列表,可以使用嵌套循环+for循环的else分支实现,示例代码如下:
MAX_RETRY = 10 retry_count = 0 process_done = False while retry_count < MAX_RETRY and not process_done: List_new = myfunction() retry_count += 1 for item in List_new: if 你的判断条件: # 替换为你的实际执行命令 执行对应操作 else: # 遇到无效元素,跳出当前for循环,重新获取列表 break else: # for循环正常执行完成未触发break,说明所有元素处理完毕 process_done = True if not process_done: raise Exception("多次调用myfunction仍未完成处理流程")
注:for循环的else分支仅在循环没有被
break语句主动打断时才会执行,非常适合用来判断列表是否完成全量遍历。
内容的提问来源于stack exchange,提问作者Websurfer
相关产品推荐
相关产品推荐

