欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python:and/or 与 & /| 到底有什么区别

程序员文章站 2022-07-05 09:48:07
Python小碗菜:and/or 与 &/| 到底有什么区别前言一、什么是逻辑运算?二、两者区别1.and/or用于整个对象2.读入数据总结前言在对Python的学习过程中,经常有人会问:对于逻辑运算,and/or 与 &/| 的区别在哪里?用哪个好?真的是哪个输入简单一点用哪个吗?其实他们是有内在区别的:and和or判断的是整个对象,而&和| 判断的是每个对象中的比特位。如果一脸懵逼请往下看。提示:为方便快捷地解决问题,本文仅介绍主要区别,并非全面介绍一、什么是逻辑运算...


前言

在对Python的学习过程中,经常有人会问:对于逻辑运算,and/or 与 &/| 的区别在哪里?用哪个好?真的是哪个输入简单一点用哪个吗?其实他们是有内在区别的:and和or判断的是整个对象,而&和| 判断的是每个对象中的比特位。如果一脸懵逼请往下看。


提示:为方便快捷地解决问题,本文仅介绍主要区别,并非全面介绍

一、什么是逻辑运算?

抄一下百度百科:

逻辑运算又称布尔运算。布尔用数学方法研究逻辑问题,成功地建立了逻辑演算。他用等式表示判断,把推理看作等式的变换。这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律 。这一逻辑理论人们常称它为布尔代数。20世纪30年代,逻辑代数在电路系统上获得应用,随后,由于电子技术与计算机的发展,出现各种复杂的大系统,它们的变换规律也遵守布尔所揭示的规律。逻辑运算 (logical operators) 通常用来测试真假值。最常见到的逻辑运算就是循环的处理,用来判断是否该离开循环或继续执行循环内的指令。

二、两者区别

1.and/or用于整个对象

在Python中所有的“非零”对象都会被会被判定为True。

a = 'hello world!'
b = ''
c = 0
print(bool(a))
print(bool(b))
print(bool(c))
print(bool(a and b))
print(bool(a or b))
print(bool(a and c))
print(bool(a or c))
True
False
False
False
True
False
True

2.&/| 用于每个对象中的比特位

当使用&和|对整个单位进行操作时,判断的是单位元素的比特,可以说是将每个比特用and或or来进行比较。所以会出现如下奇怪的现象:

print(43&45)
41

如果我们把数字分解为比特,就能知道其中的原因了:

print(bin(43))
print(bin(45))
print(bin(43&45))
print(bin(41))
0b101011
0b101101
0b101001
0b101001

可以看到,&是将比特位进行逐一比较。当然,如果我们输入一个字符串会直接报错:

print('hello' & 'world')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'str' and 'str'

三、实际运用

只说它们的区别可能印象并没有那么深刻,我这里举一个实际运用的例子可能就会恍然大悟。

先创建一个随机数组:

import numpy as np
data = np.random.randint(0,10,10)
data
array([8, 6, 5, 0, 4, 1, 0, 2, 4, 5])

用&统计大于3且小于7的数:

(data>3) & (data<7)
array([False,  True,  True, False,  True, False, False, False,  True,True])

很简单也很快的就能实现。如果我们用and会出现什么情况呢?

(data>3) and (data<7)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

显然会报错,回顾上面所说的:and和or用于对象整体,&和| 用于对象的组成部分,就可以很清楚的理解了。


总结

本文属于Python小碗菜系列,主要是笔者平时碰到和想到的Python中小知识和小技巧,后续也会持续更新,希望大家喜欢。

本文地址:https://blog.csdn.net/weixin_43887421/article/details/110388735