python--Tips--and/or与&/|的比较

    1. Tips:使用关键字and/or与使用逻辑操作运算符&/|

      今天我们来补充一个python的小知识点,and/or 关键字到底和逻辑操作运算符&/|有什么区别

      它们的主要区别在于:and 和 or判断整个对象是真是假,而& 和 | 是指每个对象中的比特位。

      当你使用and 或 or的时候,就等于让python将这个对象当作整个布尔实体、在python中,所有非零的整数都会被当做是True:

      bool(42), bool(0)
      (True, False)
      bool(42 and 0)
      False
      bool(42 or 0)
      True
      

      而当你对整数使用&和| 时,表达式操作的是元素的比特,将and或or应用于组成该数字的每个比特:

      bin(42)
      bin(59)
      bin(42 & 59)
      bin(42 | 59)
      

      请注意,& 和 I 运算时,对应的二进制比特位进行比较以得到最终结果。

​ 当你在Numpy中有一个布尔数组时,该数组可以被当做是由比特字符组成的,其中1=True、0=False。这样的数组可以用上面介绍的方式进行&和| 的操作:

A=np.array([1,0,1,0,1,0],dtype=bool)
B=np.array([1,1,1,0,1,1],dtype=bool)
A | B
array([True, True, True, False ,True, True],dtype=bool)

这样就可以很完美的支持数组的逐元素比较。

而用or来计算这两个数组时,python会计算整个数组对象的真或假,这当然会导致程序出错。

同样,对给定数组进行逻辑运算时,也应该使用 | 或 &。

结论:and 和 or 对整个对象执行单个布尔运算,而 & 和 | 对一个对象的内容(单个比特或字节) 执行多个布尔运算。 对于Numpy布尔数组,后者是常用的操作。

猜你喜欢

转载自blog.csdn.net/weixin_45870904/article/details/110580884