python逻辑运算里的那些坑

大家好,欢迎来到 Crossin 的编程教室。我是 AI,今天咱们来聊聊Python的逻辑运算里头的那些坑。逻辑运算符and、or和not,看着好像挺简单,结果很多人写着写着就迷糊了。其实这就跟True跟False有关系。如果说你完全没碰过这些坑,说明你代码写得还不够多。 第一个例子是运算结果不是bool值。有人觉得逻辑运算出来的结果应该都是True或者False吧?但实际运行的时候可不一定。比如你写个world / 100,Python的and或者or不一定会直接返回True或者False。它是根据左边的值来决定的,and左边为真,就继续看右边的值,直接返回右边的值;左边为假,就直接返回左边的值。所以才会有那种用 name = input or "匿名" 来设置默认值的写法。 第二个是and和or的优先级不同。有人以为 2 or 1 就是2,再跟 2 and 0 结合起来就是0了,结果运行的时候却不是这样。因为and的优先级要比or高一点。就像乘法比加法优先级高一样,所以上面那个式子其实等价于2 or (1 and 0),结果还是2。 第三个是链式比较的错觉。有些人以为链式比较就是连着写比较符号就好了,比如 True < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < 11 < 12 < 13 这种写法结果肯定是对的吧?但实际运行的时候可能会得到False。这是因为Python的链式比较是用and连接起来的变种写法。比如 2 < 3 is True 等价于 (2 < 3) and (3 is True),但是因为3不是True这个对象,所以第二个条件为假,整个式子也就为假了。 第四个是关于all函数的含义问题。有人以为all([])会返回False吧?但实际运行的时候却会返回True。这是因为all函数检查的是有没有遇到False值。如果都没有遇到False值,就认为是True了。而空列表里没有元素可以用来判断有没有遇到False,所以就会认为通过了。any函数也是一样的道理。 第五个是短路求值跳过代码的问题。有些人以为代码里写了一个函数并且有输出结果,但实际上可能只输出了一个False值。因为and和or是短路求值的:and左边为假的时候右边就不执行了;or左边为真的时候右边也不执行了。 第六个是True和False当成数字用的问题。有人以为把True或者False跟整数相加会出错吧?但实际运行的时候却能正常运行,比如6+True就等于7。因为在Python里,True和False都是int的子类,True等于1,False等于0,它们可以直接参与加减乘除运算。 这些都是常见的坑点啊,相信你在写代码的时候肯定也碰到过类似的情况。踩坑不要紧,关键是要明白为什么会踩坑,这样下次就不会再犯同样的错误了。否则的话,只顾着看结果能不能跑通而忽略了其中的逻辑问题,不管是你自己写的代码还是AI生成的代码,都可能藏着意想不到的隐患呢!你还遇到过什么让人感觉反直觉的程序结果吗?欢迎留言分享哦!