如何使嵌套的IF语句整齐

时间:2015-06-22 23:11:43

标签: python if-statement

这个问题可以用语言独立的方式提出,但我在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只是一行代码,因此即使它解决了后续的更改方案,使它成为一个函数并不会感觉好多了。

2 个答案:

答案 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