前言

在对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中小知识和小技巧,后续也会持续更新,希望大家喜欢。


往期文章:

不知者:pandas:使用函数批量处理数据(map、apply、applymap)​zhuanlan.zhihu.com

不知者:pandas: DataFrame 将时间按小时分钟等方式聚合​zhuanlan.zhihu.com

不知者:pandas:快速处理字符串方法​zhuanlan.zhihu.com

更多内容敬请关注我的CSDN博客:

python 比特输出_Python小碗菜:and/or 与 amp;/| 到底有什么区别相关推荐

  1. python数据输出_python数据输出

    下面的是我的code, 但是最后的结果全部都是others,有哪位大神能帮忙看产生输出的最简单方法是使用print语句,可以通过用逗号分隔零个或多个表达式.这个函数传递表达式转换为一个字符串,如下结果 ...

  2. python怎么输出_python输出语句怎么用

    Python中输出语句是print语句 1.逗号分隔符 在Python中print语句可根据sys.stdout中包含的文件生成输出,它接受一个逗号分隔的对象表,如下实例:x = 1 y = 2 z ...

  3. python怎么输出_Python如何输出整数

    Python输出整数的方法: 先使用str()函数将数字转换成字符串赋值给变量i,再用"if i.count('.') == 0"语句判断字符串中是否没有小数点,如果是则输出这个字 ...

  4. python print 换行_Python小课堂第21课:规整一下我们的输出之打印格式化与字符串...

    整齐的输出,不仅美观,还能方便我们更容易的定位问题的重点.所以我们有必要将我们的输出内容美化一下! 请点击右上角"关注"按钮关注我们,跟着木辛老师深入浅出的掌握输出格式化的方法吧! ...

  5. python如何横向输出_PYTHON小工具-竖排表格内容转横向输出

    工作中常出现某某人发来的表格都是放在一列的情况,这种时候真的想把对方按在地上摩擦,但是又没办法,数据已经给到自己了,只能硬着头皮一点一点的改了. 不过呢,用python得话可以很容易就搞定这个问题 首 ...

  6. python多线程输出_Python多线程

    多线程基础概念 并行与并发 并行:同时处理多个任务,必须在多核环境下 一段时间内同时处理多个任务,单核也可以并发 并发手段 线程:内核空间的调度 进程:内核空间的调度 协程:用户空间的调度 线程可以允 ...

  7. python条件输出_python基础(二)条件判断、循环、格式化输出

    继续上一篇,今天主要总结一下条件判断.循环.格式化输出 一.条件判断 python中条件判断使用if else来判断,多分支的话使用if elif ... else,也就是如果怎么怎么样就怎么怎么样, ...

  8. python不等于_Python小课堂|注释+运算符

    注释 确保对模块, 函数, 方法和行内注释使用正确的风格 Python中的注释有单行注释和多行注释: Python中单行注释以 # 开头,例如: # 这是一个注释 print("Hello, ...

  9. python使用技巧_python小技巧

    平时开发中,一些使用的技巧,记录一下,持续更新---- 1.当函数默认参数为可变对象时,每次调用函数,是不会重新创建对象的 示例代码1: def ddd(a,b=[]): b.append(a)ret ...

最新文章

  1. Intel不争气,7nm再延后两年将彻底落败
  2. Shiro 核心功能案例讲解 基于SpringBoot 有源码
  3. MySQL笔记14:常用命令
  4. 解析 | 如何从频域的角度解释CNN(卷积神经网络)?
  5. RTT线程管理篇——RTT什么时候调度
  6. bypass最新版d盾mysql_Bypass D盾_IIS防火墙SQL注入防御(多姿势)
  7. 手把手教你云服务器如何搭建typecho博客网站(包括配置免费SSL证书)
  8. Java面试题超详细讲解系列之九【SQL语句篇】
  9. 摄影测量——EPS三维测图软件正射影像+三维模型后期成果处理(附软件安装包+学习视频)
  10. 20本适合C/C++程序员入门的C/C++编程书籍PDF版
  11. Google Chrome谷歌浏览器繁体字修改为简体字
  12. 度分秒转度数和度数转度分秒
  13. DAO层和Service层的究极理解--这波我在大气层
  14. Qt打包程序报错“应用程序无法正常启动(0xc000007b)”
  15. python朋友圈图片_教你如何用Python处理图片九宫格,炫酷朋友圈
  16. GeeM2引擎弹出装备显示框的设置方法
  17. 产品运动动画用什么软件做的_3C产品渲染用什么软件好?Keyshot,工业设计必备!...
  18. HDU 6095 Rikka with Competition
  19. python写qq群机器人怎么弄_python打造自由DIY 群聊机器人
  20. 软件分享|eCognition9.0下载

热门文章

  1. 95-910-150-源码-FlinkSQL-Flink SQL 的元数据管理
  2. 【Spring】Spring autowire-candidate解决注入的时候有多个符合的bena
  3. 【高并发】JUC中等待多线程完成的工具类CountDownLatch
  4. es system call filters failed to install; check the logs and fix your configuration or disable syste
  5. SpringBoot:Spring boot 主程序的功能SpringApplication.run(启动流程)
  6. 【SpringBoot】spring boot + mybatis + druid
  7. java输出object object_js控制台显示[object Object]问题
  8. SpringBoot启动时实现自动执行代码的几种方式讲解
  9. Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)
  10. 带你深入了解 GitLab CI/CD 原理及流程