【发布时间】:2019-11-02 04:05:56
【问题描述】:
我有以下控制流程,我觉得可以改进,但我不知道如何...
我有两个互斥条件和相应的操作,需要执行特定条件(即当那个为真时)和非特定条件(即当任一为真时)。我也想在两个条件都不匹配时做点什么。
原来我有:
if condition1:
print("something only on condition1")
print("also this because any condition is True")
elif condition2:
print("something only on condition2")
print("also this because any condition is True")
else:
print("do this when no condition")
然而,当“print(”也是因为任何条件都为真“)”部分是一些大代码块时,重复它似乎不切实际。于是我想到了
if condition1:
print("something only on condition1")
elif condition2:
print("something only on condition2")
if condition1 or condition2:
print("also this because any condition is True")
else:
print("do this when no condition")
然而,这感觉有点矫枉过正。由于已经分别检查了这两个条件,因此带有“或”语句的条件似乎不必要地多余。不过我可能弄错了。
第三种选择是
if condition1 or condition2:
if condition1:
print("something only on condition1")
elif condition2:
print("something only on condition2")
print("also this because any condition is True")
else:
print("do this when no condition")
但这也没有真正的改进,我觉得堆叠的 if 语句更难快速理解。
另外我需要记住,我希望在任何条件特定操作之后运行“也是因为任何条件为真”。
我的目标/问题是,是否有一种巧妙的方法可以简化此控制流程并使其易于理解。例如,一种只有 3 个控制块(if、elif、else)的方法,或者通常只对每个单独的条件进行一次评估。
谢谢你:)
编辑: 实际任务的背景信息(仍然简化):
有两组(未来可能会更大):
img_extensions = ('.png', '.jpg')
video_extensions = ('.avi')
我现在得到一些路径 [string] 并想检查是否有一个
path.endswith(img_extensions) <- condition1
path.endswith(video_extensions) <- condition2
然后我根据满足的条件创建视频或图像。 如果其中一个是真的,我会告诉用户它是成功的。 如果不满足条件,说明路径有问题,我想相应地通知用户。
【问题讨论】:
-
如果这些是您不想继续执行的复杂条件,您可以将它们提取到变量中
-
好点,但就我而言,条件实际上并不太复杂,所以问题更多来自追求最优/完美
-
我想你已经给出了所有的选择。据我所知,没有其他选择。选择你认为最好的。
-
@pcsso 你能解释一下这些条件吗?根据他们的不同,它可能存在更好的选择
-
你可以把“一些大代码块,重复它似乎不切实际”放在一个函数中,并使用第一个块作为它最可读的块。
标签: python if-statement controls execution