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

本文探讨了Python中or运算符与C语言中||运算符的区别,通过一个具体的例子展示了如何在Python中误用or导致错误的结果。作者通过对比两种语言的逻辑运算规则,解释了Python中or运算符会一直计算到找到一个True值或最后一个表达式,而C语言的||运算符遵循短路原则,仅在必要时计算。最终,博客提供了Python的and和not运算符的规则,帮助读者更好地理解Python的逻辑运算。
摘要由CSDN通过智能技术生成

我真的学会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

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

 

表格参考菜鸟教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值