首页 > 解决方案 > 变量检查的干净方法+在while循环中继续

问题描述

我有一个相对较大的main()函数,我需要在函数的不同位置多次检查一个变量,然后决定是否应该continue相应地循环,如下所示:

def main():
    while True:
        ...
        if foo.check():
            reset()
            continue
        ...

作为计时员在哪里foo工作,因此我需要每隔一段时间检查一次。这 3 行在函数中出现大约 3 到 5 次。

我讨厌这有多脏,那么有没有更清洁的方法呢?

标签: pythonpython-3.x

解决方案


您没有指定足够的信息。我有两个问题:

  1. 调用foo.check() 幂等是否意味着它总是返回相同的值并且没有副作用?
  2. 是否有一条通过代码的路径,您可以在由 continue 语句控制的同一块中到达第 n调用,而无需先调用第 n-1出现?foo.check()

例如,如果答案的答案是肯定的,而第二个问题的答案是否定的,那么您可以删除除第一次调用之外的所有调用,foo.check()因为返回值很明显False,否则您将永远无法到达第二次调用。

如果第一个问题的答案是肯定的,第二个问题的答案是肯定的,那么如果调用foo_check()成本很高,我可能会考虑预先设置:

check_result = foo.check()

然后foo_check()check_result. 但最终你仍然需要做所有的检查。但在所有情况下,您都可以创建一个函数check_and_reset

def check_and_reset():
    if foo_check():
        reset()
        return True
    return False

然后你的代码变成:

if check_and_reset(): continue

推荐阅读