Python 如何使嵌套的IF语句更整洁
这个问题可以用独立于语言的方式提出,但我是在python的上下文中提出的,因为不同的语言会有不同的细微差别 我认识到这与类似,但我认为我的不同之处在于,我问的是一种情况,即将两个条件放在带有Python 如何使嵌套的IF语句更整洁,python,if-statement,Python,If Statement,这个问题可以用独立于语言的方式提出,但我是在python的上下文中提出的,因为不同的语言会有不同的细微差别 我认识到这与类似,但我认为我的不同之处在于,我问的是一种情况,即将两个条件放在带有&的相同if语句中会产生错误 假设我想看看abc[x]是否等于'fish',但假设我不确定len(abc)是否等于x。如果abc[x]=='fish',我不能只使用,因为它可能超出了索引范围。因此,我需要这样做 if len(abc)>x: if abc[x]=='fish':
&
的相同if语句中会产生错误
假设我想看看abc[x]
是否等于'fish',但假设我不确定len(abc)
是否等于x。如果abc[x]=='fish',我不能只使用,因为它可能超出了索引范围。因此,我需要这样做
if len(abc)>x:
if abc[x]=='fish':
dostuff
else:
dootherstuff
else:
dootherstuff
有没有一种更干净的方法来做到这一点,我没有另外两个语句来完成相同的dootherstuff
?如果我想更改dootherstuff
的内容,我必须在两个地方都更改,但到那时我可能会忘记。当然,我可以试着在以后对代码进行注释以提醒自己,或者让dootherstuff
成为一个函数,但这似乎仍然是第二好的。很多时候,当我完成这项工作时,dootherstuff
仅仅是一行代码,因此即使它解决了后续的更改场景,也不会让我感觉更好。当然,这里是:
if len(abc) > x and abc[x] == 'fish':
dostuff
else:
dootherstuff
和
短路,因此只有当len(abc)>x
为True
时才会对abc[x]==“fish”
进行评估。大多数语言都有类似的运算符(例如C中的&&
)
&
表示按位“and”,并且不会短路,所以不要使用它 您完全可以使用逻辑和运算符组合这两个条件。包括Python在内的大多数(如果不是全部的话)现代编程语言都使用这种语言。也就是说,一步一步地处理表达式,不计算它们不需要的部分。这里,如果和
表达式的左侧是False
,则整个过程将是False
,并且不需要计算右侧,因此,类似这样的内容将是完全安全的:
if len(abc)>=x and abc[x]=='fish':
dostuff
else:
dootherstuff
试一试怎么样?一般来说,如果长度在大多数时间内都在限制范围内,则速度也会更快。是Python中的一个短路运算符-听起来非常适合您的用途。备选建议:尝试“if all()”:if all([condition1,condition2])
环绕try,只替换外部if-else,我仍然会做dootherstuff
两次。@kindall,如果x
恰好是len(abc)
,这不会在abc[x]时仍然导致索引超出范围异常==='fish'
被选中,因为len(abc)>=x
的计算结果为真?是的,但这和原来的问题是一样的。我没有意识到这是有效的。我知道这在VBA中不起作用,但我想这是我的错,因为我把VBA的错误假定到了其他语言上。@Alejandro说得好,我习惯于R,其中列表和向量从1开始,而不是从0开始。将=
更改为
though@DeanMacGregor:是的,假设像VBA这样的任何其他语言都会让你陷入困境。:-)