Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中检查多个条件并避免代码重复_Python_Refactoring - Fatal编程技术网

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

在Python中检查多个条件并避免代码重复,python,refactoring,Python,Refactoring,这是发生在循环内的三向条件筛选。这里n必须满足三个条件中的一个;它必须是零、负数或正数。函数*dothis()*在代码中重复两次(对于零或负)。因为一个需要继续循环,另一个需要中断循环,所以我们也不能对条件进行分组。第三个是最后过滤的,也需要中断循环,但在执行不同的函数*dothat()*之后 我找不到其他更优雅的方法来做这件事。如果用一系列语句替换这些函数调用,会使它看起来更糟(这在我的实际代码中发生)。是否有任何可能的解决办法 while True: if n == 0:

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

我找不到其他更优雅的方法来做这件事。如果用一系列语句替换这些函数调用,会使它看起来更糟(这在我的实际代码中发生)。是否有任何可能的解决办法

while True:
    if n == 0:
        dothis()
        continue
    if n < 0:
        dothis()
        break
    dothat()
    break
为True时:
如果n==0:
dothis()
持续
如果n<0:
dothis()
打破
dothat()
打破
注意:所有这些都必须在循环内,这一点很重要。

如果为True:

如果n你可能会得到很多风格/偏好建议(有人会指出你的平等测试有缺陷——你使用的是赋值而不是平等)。我认为从长远来看,你的感受更容易理解

我个人最喜欢的是:

while n == 0:
    dothis()
if n < 0:
    dothis()
elif n:
    dothat()
当n==0时:
dothis()
如果n<0:
dothis()
elif n:
dothat()

最好将您的决策点分开:1)我做这个还是那个,2)我在这里停下来

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

    if n:
        break

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

假设在这种情况下,
n
没有被
dothis()
dothat()更改

为True时:
#如何打电话

首先,如果n,您不需要第一个中断,因为除非满足第一个continue,否则应用程序将中断。
dothis()如果n<0 else dothat()
更正了它,这是python的新特性(这是我的借口,呵呵)。困扰我的一件事是,所有这些条件都必须在一个循环内。
while True:
    if n > 0:
        dothat()
    else:
        dothis()

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