2024-07-02 12:18:54 发布
网友
我有一个相对较大的main()函数,我需要在函数中的不同位置多次检查变量,然后决定是否相应地continue循环,如下所示:
main()
continue
def main(): while True: ... if foo.check(): reset() continue ...
当foo在某种程度上充当计时员时,因此我需要在特定的时间间隔检查它。这三行在函数中出现大约3到5次
foo
我讨厌这有多脏,有没有更干净的方法
您没有指定足够的信息。我有两个问题:
foo.check()
例如,如果答案的答案是yes,而第二个问题是no,那么您可以删除对foo.check()调用的第一次出现之外的所有内容,因为返回值显然是False,否则您将永远无法到达第二次出现
False
如果第一个问题的答案是肯定的,第二个问题是肯定的,那么如果对^ {CD5>}的调用是昂贵的,那么我可以考虑前面的设置:
check_result = foo.check()
然后用check_result替换对foo_check()的每个调用。但最终你还是需要做所有的检查。但在所有情况下,您都可以创建函数check_and_reset:
check_result
foo_check()
check_and_reset
def check_and_reset(): if foo_check(): reset() return True return False
然后您的代码变成:
if check_and_reset(): continue
我有两个建议:
建议1: 创建另一个函数并在任何地方调用
建议2: 把它做成一行
if foo.check():reset();continue
如果在运行一组任务时控制某些时间是一种复杂的方法,我建议在任务上引入一个循环。您甚至可以轻松地传递部分结果:
def task_a(): ... def task_c(some_input): ... tasks = [lambda x: task_a(), task_c] last_stage_output = None while True: reset() for task in tasks: if not foo.check(): break last_stage_output = task(last_stage_output)
通过这种方式,您可以清楚地表明,这只是一系列要完成的任务,添加、删除或重新排列它们都很简单,并且时间逻辑集中在一个点上
您没有指定足够的信息。我有两个问题:
foo.check()
幂等是否意味着它总是返回相同的值并且没有副作用李>foo.check()
的nth调用李>例如,如果答案的答案是yes,而第二个问题是no,那么您可以删除对
foo.check()
调用的第一次出现之外的所有内容,因为返回值显然是False
,否则您将永远无法到达第二次出现如果第一个问题的答案是肯定的,第二个问题是肯定的,那么如果对^ {CD5>}的调用是昂贵的,那么我可以考虑前面的设置:
然后用
check_result
替换对foo_check()
的每个调用。但最终你还是需要做所有的检查。但在所有情况下,您都可以创建函数check_and_reset
:然后您的代码变成:
我有两个建议:
建议1: 创建另一个函数并在任何地方调用
建议2: 把它做成一行
如果在运行一组任务时控制某些时间是一种复杂的方法,我建议在任务上引入一个循环。您甚至可以轻松地传递部分结果:
通过这种方式,您可以清楚地表明,这只是一系列要完成的任务,添加、删除或重新排列它们都很简单,并且时间逻辑集中在一个点上
相关问题 更多 >
编程相关推荐