and、or、not
优先级:() > not > and > or
python中逻辑值为False的对象主要有一下几类:
python上述对象除了False以外,其他任何对象都不是False,只是他们的逻辑值是False,两者不是同一种概念,所以对于“[] == False”的结果是False。
and放在条件判断语句和循环语句中很简单,直接判断最终结果的逻辑值是True或者False就可以了。我发现发在两个地方的时候有点少许变化,在这里写出来。
and放在print和return语句中会输出或返回and两边其中一个对象,具体返回的哪一个对象要看第一个对象的逻辑值,例如:
print([] and [1,2,3]) # 输出结果是[]
print({1:2}and []) # 输出结果是[]
由此可见在print函数中,当第一个对象的逻辑值是False时,输出第一个对象,当第一个对象的逻辑值是True时,输出第二个对象。
2. return 语句中
return [] and [1,2,3] # 返回结果是[]
return {1:2} and [] # 返回结果是[]
在return语句中,当第一个对象的逻辑值是False时,返回第一个对象,当第一个对象的逻辑值是True时,返回第二个对象。
python在使用and运算符来输出或返回对象,我觉得用处不太大,如果第一个对象的逻辑值是False,那么输出或返回的就是一个没有内容的对象,在程序中一般用不到这样的数据;当第一个对象的逻辑值是True时,输出或返回第二个对象,但是第一个对象明明有数据,为什么要舍去呢?我觉得一般也不会这样做。这里and的用法也就是和or做一下对比,实际用处我觉得不大。
python我想到的使用and的时候为什么要返回第一个对象的原因:
python对于逻辑值and,and具有短路的特性
,也就是说当第一个表达式为False时,后面的表达式不再计算,直接短路。在print函数和return语句中,首先让第一个对象的逻辑值与True进行比较,比较的结果作为and的左值
,所以此时如果结果为False,那么and发生短路,直接就输出或返回第一个对象。
python就拿"return [] and [1,2,3]"为例,"bool([]) == True"的结果为False,所以短路,返回第一个对象[]。
以"return [1,2]and {1:2}"为例,因为"bool([1,2]) == True"的结果为True,对于and来说无法确定最终结果,所以要去计算第二个表达式的结果,也就直接返回第二个对象。
or的用法与and相同,但是结果正好相反,直接上例子:
print([] or [1,2,3]) # 输出结果是[1,2,3]
print({1:2}or []) # 输出结果是{1:2}
由此可见在print函数中,当第一个对象的逻辑值是False时,输出第二个对象,当第一个对象的逻辑值是True时,输出第一个对象。
return [] and [1,2,3] # 返回结果是[]
return {1:2} and [] # 返回结果是[]
在return语句中,当第一个对象的逻辑值是False时,返回第二个对象,当第一个对象的逻辑值是True时,返回第一个对象。
python我想到的使用and的时候为什么要返回第一个对象的原因:
python对于逻辑值or,or具有短路的特性
,也就是说当第一个表达式为True时,后面的表达式不再计算,直接短路。在print函数和return语句中,首先让第一个对象的逻辑值与True进行比较,比较的结果作为or的左值
,所以此时如果结果为True,那么or发生短路,直接就输出或返回第一个对象。
python就拿"return [] or [1,2,3]"为例,"bool([]) == True"的结果为False,但是对于or来说,无法确定结果,所以会返回第二个结果。
以"return [1,2]or {1:2}"为例,因为"bool([1,2]) == True"的结果为True,对于or来说短路,所以直接返回第一个对象。
not不用多说,它是单目运算符,计算的结果只有True和False,返回或输出的也是True或False
对于python中and和or在print和return中(或许其他地方也有,但是我还没有发现)的应用,我觉得也是python在简化代码的书写,使得代码的开发效率更高。其次and和or的这一用法和linux中&&和||的用法也及其相似,在linux中,&&的作用是当第一条指令执行成功时,执行第二条指令,否则不再执行第二条指令;||的用法和&&正好相反,当第一条指令执行成功时,不执行第二条指令,否则执行第二条指令。具体原因和介绍请参考链接
文中有我个人的理解也有摘抄的别人的,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步