python逻辑运算符

python逻辑运算符

  • 前言
  • and
  • or
  • not
  • 写在最后

前言

and、or、not
优先级:() > not > and > or
python中逻辑值为False的对象主要有一下几类:

  • None
  • False
  • 值为0的数:0、0.0、0.0L等
  • 空字符串:“”
  • 空列表:[]
  • 空字典:{}
  • 空元组:()
  • 空集合:set()

       python上述对象除了False以外,其他任何对象都不是False,只是他们的逻辑值是False,两者不是同一种概念,所以对于“[] == False”的结果是False。

and

       and放在条件判断语句和循环语句中很简单,直接判断最终结果的逻辑值是True或者False就可以了。我发现发在两个地方的时候有点少许变化,在这里写出来。
       and放在print和return语句中会输出或返回and两边其中一个对象,具体返回的哪一个对象要看第一个对象的逻辑值,例如:

  1. print函数中
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

or的用法与and相同,但是结果正好相反,直接上例子:

  1. print函数中
print([] or [1,2,3]) # 输出结果是[1,2,3]
print({1:2}or []) # 输出结果是{1:2}

       由此可见在print函数中,当第一个对象的逻辑值是False时,输出第二个对象,当第一个对象的逻辑值是True时,输出第一个对象。

  1. return 语句中
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

       not不用多说,它是单目运算符,计算的结果只有True和False,返回或输出的也是True或False

写在最后

       对于python中and和or在print和return中(或许其他地方也有,但是我还没有发现)的应用,我觉得也是python在简化代码的书写,使得代码的开发效率更高。其次and和or的这一用法和linux中&&和||的用法也及其相似,在linux中,&&的作用是当第一条指令执行成功时,执行第二条指令,否则不再执行第二条指令;||的用法和&&正好相反,当第一条指令执行成功时,不执行第二条指令,否则执行第二条指令。具体原因和介绍请参考链接

文中有我个人的理解也有摘抄的别人的,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步

你可能感兴趣的:(python)