不要用C语言的思维 来思考python的or(或)

我真的学会python了吗?在写这篇博客前,我问我自己

本来觉得python简单,就很少去纠结python语法的细节

直到今天,发现了自己C语言思维惯性导致的bug

这个bug产生的主要原因是对于python运算符or的理解

特地写下这篇博客,解释一下python中or和C语言中||的不同

先看python代码,

i = 1
if i == (2 or 3 or 1):
    print("yes")
else:
    print("not")

你觉得结果是什么呢,按C语言的思维套路,当然是输出yes了

但是结果是not

我一开始以为是自己C语言学忘记了,才出现这个错误,特地去C语言里验证了一下

由于pycharm不能编译C文件,我只好用实验室的服务器了。。。

先通过vim新建一个C文件

vim test.c

按a进入插入模式

输入

#include <stdio.h>
  
int i = 1;

void main()
{
        if (i==(2||3||1))
                printf("yes \n");
        else
                printf("not \n");
}

按esc ,在按:wq保存退出

命令行中输入

gcc test.c -o test1

生成可执行程序test1

我本以为,这里的C语言和上面的python在逻辑上是一样的。。。

但是,通过

./test1

运行的结果是yes,

这就有些神奇了。。。至少说明我C语言的逻辑。。。还没有忘记。。。

通过查阅资料,发现python的or

和C的||不太一样

具体规则如下

声明a=10,b=20

x or y 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
所以在执行if i == (2 or 3 or 1):的时候

他会先计算2 or 3,结果为2,再计算2 or 1,结果为2,最后才是i == 2

当然输出的是not

顺便挂上and,not的具体规则

声明a=10,b=20

运算符 逻辑表达式 描述 实例
and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
or x or y 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False

表格参考菜鸟教程

猜你喜欢

转载自blog.csdn.net/weixin_39518984/article/details/109675813
今日推荐