检查多个条件并避免Python中的代码重复

时间:2014-02-19 15:09:01

标签: python refactoring

这是在循环内发生的3向条件过滤。在这里,n必须满足三个条件中的一个;它必须是零,负数或正数。函数* dothis()*在代码中重复两次(零或负)。由于一个需要继续循环而另一个需要打破它,我们也不能对这些条件进行分组。第三个是最后过滤的,也需要在执行不同的函数* dothat()*后打破循环。

我找不到另一种方法,这样做会更优雅。这些函数调用,如果被一系列语句取代,会使它看起来更糟(这在我的实际代码中发生)。有没有可能的解决方法?

while True:
    if n == 0:
        dothis()
        continue
    if n < 0:
        dothis()
        break
    dothat()
    break

注意:所有这些必须在循环中必不可少。

4 个答案:

答案 0 :(得分:1)

while True:
    if n <= 0:
        dothis()
        if n == 0: continue
    dothat()
    break

假设dothis()在两种情况下实际上都是相同的功能。 这将产生相同的结果。

答案 1 :(得分:1)

你可能会得到很多风格/偏好推荐(而且一个人会指出你的平等测试是有缺陷的 - 你使用的是赋值而不是相等)。我认为从长远来看,这是你感觉更容易理解的东西。

我个人最喜欢的是:

while n == 0:
    dothis()
if n < 0:
    dothis()
elif n:
    dothat()

答案 2 :(得分:0)

分离你的决策点可能更好:1)我是这样做还是那样,2)我是否会在这里停止?

while True:
    if n > 0:
        dothat()
    else:
        dothis()

    if n:
        break

答案 3 :(得分:0)

我个人更喜欢将代码分成逻辑部分。如果它只能发生一次,那么只写一次。虽然这种方式并不紧凑/看起来不漂亮,但我发现更明显的是会发生什么。当我(或其他人)浏览代码时我可以说.. “好吧它会dothis()dothat()然后breakcontinue。”< / em>

假设在这种情况下ndothis()

未更改dothat()
 while True:
    # How to call
    if n <= 0:
        dothis()
    else:
        dothat()
    # How to end
    if n == 0:
        continue
    else:
        break