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