Python新手关于!=运算符链式运算的逻辑疑问
理清Python链式
!=运算符的逻辑 嘿,我来帮你搞清楚这个困惑——你踩的这个坑其实是Python链式比较的规则和你直觉里的“分步计算”不一样导致的,很正常,新手都容易在这里绕晕~
首先得明确:Python里的链式比较(不管是!=、==、<还是其他比较运算符),并不是从左到右依次把前一次的比较结果和下一个操作数再比较,而是会逐对比较相邻的操作数,然后用and把所有比较的结果连接起来,而且中间的操作数只会被计算一次。
拿你的例子-5 != False != True != True来说,Python会把它解析成:
(-5 != False) and (False != True) and (True != True)
我们逐个拆解每个比较:
-5 != False:在Python的布尔语境里,非零整数都会被视为True,所以-5等价于True,True != False的结果是TrueFalse != True:这个很直观,结果是TrueTrue != True:显然结果是False
然后把这三个结果用and连接:True and True and False,最终结果自然是False,这就是Python交互环境返回这个值的原因。
而你之前的分步计算逻辑是错的——你误以为表达式是((-5 != False) != True) != True,也就是把前一步的比较结果(比如第一个True)再和下一个操作数(True)比较,得到False后再和最后一个True比较得到True。但这完全不符合Python链式比较的规则哦!
再举个简单的例子帮你巩固:
1 != 2 != 3等价于1 != 2 and 2 !=3,返回True1 != 2 != 2等价于1 !=2 and 2 !=2,返回False
总结一下:记住Python的链式比较是相邻操作数逐对比较,所有比较结果都为True时整个表达式才为True,而不是把前一次的比较结果作为下一次比较的左操作数。搞懂这个规则,以后再遇到链式比较就不会晕啦~
内容的提问来源于stack exchange,提问作者Deepesh Sidhwani
相关产品推荐
相关产品推荐

