这个问题可以用语言独立的方式提出,但我在python的上下文中提问,因为不同的语言会有不同的细微差别。
我认识到这与this question类似,但我认为我的不同之处在于我在询问将两个条件置于同一if语句&
的情况下会产生的情况错误。
让我们说我想知道abc[x]
是否等于“鱼”。但是,让我们说我不确定len(abc)
是> =到x。我不能拥有if abc[x]=='fish'
,因为它可能超出范围。因此我需要做
if len(abc)>x:
if abc[x]=='fish':
dostuff
else:
dootherstuff
else:
dootherstuff
有没有一种更干净的方法可以做到这一点,我不会有两个其他语句最终做同样的dootherstuff
?如果我想更改dootherstuff
晚于我必须在两个地方更改它,但到那时我可能会忘记。当然,我可以尝试评论代码以便稍后提醒自己或使dootherstuff
成为一个功能,但这似乎仍然是第二好的。很多时候,当我结束这一过程时,dootherstuff
只是一行代码,因此即使它解决了后续的更改方案,使它成为一个函数并不会感觉好多了。
答案 0 :(得分:4)
当然,这是:
if len(abc) > x and abc[x] == 'fish':
dostuff
else:
dootherstuff
and
短路,因此只有在abc[x] == 'fish'
为len(abc) > x
时才会评估True
。大多数语言都有类似的运算符(例如C中的&&
)。
&
用于按位"和"并且没有短路,所以不要使用它。
答案 1 :(得分:2)
您绝对可以将两个条件与逻辑and
运算符结合使用。大多数(如果不是全部)现代编程语言都使用short circuit evaluation,包括Python。即,该过程是逐步表达的,并且不评估它们不需要的部分。在这里,如果and
表达式的左侧是False
,则整个事物将是False
,并且不需要评估右侧,因此,这样的事情将是完全的安全:
if len(abc)>=x and abc[x]=='fish':
dostuff
else:
dootherstuff