1. 布尔运算

布尔类型只有True和False两种值,但是布尔类型有以下几种运算:

1.1 与运算:
只有两个布尔值都为 True 时,计算结果才为 True。

True and True   # ==> True
True and False   # ==> False
False and True   # ==> False
False and False   # ==> False

1.2 或运算:
只要有一个布尔值为 True,计算结果就是 True。

True or True   # ==> True
True or False   # ==> True
False or True   # ==> True
False or False   # ==> False

1.3 非运算:
把True变为False,或者把False变为True:

not True   # ==> False
not False   # ==> True

布尔运算在计算机中用来做条件判断,根据计算结果为True或者False,计算机可以自动执行不同的后续代码。

2. 短路计算

在Python中,布尔类型还可以与其他数据类型做 and、or和not运算,请看下面的代码:

a = True
print(a and 'a=T' or 'a=F')

计算结果不是布尔类型,而是字符串 a=T,这是为什么呢?

因为Python把0、空字符串''None看成 False其他数值非空字符串都看成 True,所以:

True and ‘a=T’ 计算结果是 ‘a=T’
继续计算 ‘a=T’ or ‘a=F’ 计算结果还是 ‘a=T’
要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算

  1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。

  2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。

所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。

实例
请运行如下代码,并解释打印的结果:

a = 'python'
print('hello,', a or 'world')
b = ''
print('hello,', b or 'world')

即判断hello, 后输出的是什么。

我们知道a or b 会发生短路计算:
a True 则输出a ,a False 则输出b,所以结果为:

 hello, pythonhello, world

【廖雪峰python入门笔记】布尔运算和短路计算相关推荐

  1. 【廖雪峰python入门笔记】列表生成式

    1. 生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, ...

  2. 【廖雪峰python入门笔记】迭代

    1. 迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration). 在Python中,迭代是通过for ...

  3. 【廖雪峰python入门笔记】切片

    1. 对list进行切片 对list进行切片 取一个list的部分元素是非常常见的操作.比如,一个list如下: L = ['Adam', 'Lisa', 'Bart', 'Paul'] 取前3个元素 ...

  4. 【廖雪峰python入门笔记】函数

    1. 函数 我们知道圆的面积计算公式为: S = πr² 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...

  5. 【廖雪峰python入门笔记】dict

    1. dict 我们已经知道,list和tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Lisa', 'Bart'] 或者考试的成绩列表: [95, 85, 59] 但是 ...

  6. 【廖雪峰python入门笔记】for循环

    list或tuple可以表示一个有序集合.如果我们想依次访问一个list中的每一个元素呢?比如 list: L = ['Adam', 'Lisa', 'Bart'] print(L[0]) print ...

  7. 【廖雪峰python入门笔记】if语句

    1. if语句及缩进规则 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = 20 if ...

  8. 【廖雪峰python入门笔记】tuple_创建单元素

    tuple和list一样,可以包含 0 个.1个和任意多个元素. 包含多个元素的 tuple,前面我们已经创建过了. 包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示: t = ( ...

  9. 【廖雪峰python入门笔记】list_按照索引访问

    1. 按照索引访问list Python按照索引访问list 由于list是一个有序集合,所以,我们可以用一个list按分数从高到低表示出班里的3个同学: L = ['Adam', 'Lisa', ' ...

最新文章

  1. 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java
  2. Tyvj-TOM的无穷序列
  3. 用好这个新功能,报表数据安全瞬间提升一个等级!
  4. 好用的python学习软件_5种好用的Python工具!Python学习分析
  5. 你还在抱怨开发工具,为什么不动手优化? | 人物志
  6. vue 报错 Error: timeout of 5000ms exceeded
  7. jmeter正则中常见的转义字符-笔记三
  8. Linux下编译软件时指定安装目录
  9. Win10安装Nek5000
  10. c语言单片机编程教学大纲,单片机应用技术[C语言]教学大纲.doc
  11. C++模板编程(18)---模板实例化instantiation
  12. bi报表工具应该具备哪些功能
  13. spring中 allowBeanDefinitionOverriding(spring.main.allow-bean-definition-overriding)原因分析、解决办法
  14. 找不到xinput1_3.dll怎么办?如何修复dll文件缺失
  15. Python招聘职位大体是两个方向
  16. java 数据周期预测_预测算法 | Holt Winter季节性指数平滑法 附JAVA代码
  17. Vue 3 模板语法
  18. HDUOJ1865 1string
  19. LOJ10155 一本通1577 数字转换 题解
  20. 一篇好文之Android数据库 GreenDao的使用指南(源码+案列)

热门文章

  1. 正则表达式的基本入门
  2. WinForm 实现验证码
  3. java I/O总结(收藏)
  4. 如何使用 Python 隐藏图像中的数据
  5. 用 Python 制作酷炫的可视化大屏,特简单!
  6. AI一眼识别这是什么鸟 “我们来找茬”十级选手诞生
  7. 程序员晒元宵节福利,网友:看了我想砸键盘......
  8. 对标Oculus Quest2,爱奇艺奇遇VR打的什么牌?
  9. 机器学习新闻综述:2019年AI领域不得不看的6篇文章
  10. 深度学习可解释性问题如何解决?图灵奖得主Bengio有一个解