引子:

>>> print '' or 5 or 0
5
>>> print 5 and 4
4
>>> print '' or 5 or 0 and 4
5

出现以上情况的原因是什么呢?

bool('') == False bool(0) == False
所有变量的位操作都是通过强制转换成bool实现的,并且表达式的值是从左到右第一个能够确定表达式的值的变量。
例如 (‘’ or 5 or 0)==(False or True or False),当遇到第一个True的时候,表达式的值等于True这个变量(5)的值,并且不会再去管后面是什么,所以返回5.
1. 在纯and语句中,如果每一个表达式都不是假的话,那么返回最后一个,因为需要一直匹配直到最后一个。如果有一个是假,那么返回假
2. 在纯or语句中,只要有一个表达式不是假的话,那么就返回这个表达式的值。只有所有都是假,才返回假
3. 在or和and语句比较难表达,总而言之,碰到and就往后匹配,碰到or如果or左边的为真,那么就返回or左边的那个值,如果or左边为假,继续匹配or右边的参数。

(False or 1)  输出1

(1 or False)    输出1

(True or 1)输出前者

(1 or True)   输出前者

(True and 1) 输出后者

(1 and True)    输出后者

(False and 1)输出False

(1 and False)  输出False

对python而言

其一, 在不加括号时候, and优先级大于or

其二, x or y 的值只可能是x或y. x为真就是x, x为假就是y

第三, x and y 的值只可能是x或y. x为真就是y, x为假就是x

显然,

对于, 1 or 5 and 4: 先算5 and 4, 5为真, 值为4. 再算1 or 4, 1 为真,值为1

对于, (1 or 5) and 4: 先算1 or 5, 1为真, 值为1. 再算1 and 4, 1为真,值为4

在Python中,空字符串为假,非空字符串为真。非零的数为真。

数字和字符串之间、字符串之间的逻辑操作规律是:

对于and操作符:

只要左边的表达式为真,整个表达式返回的值是右边表达式的值,否则,返回左边表达式的值

对于or操作符:

只要两边的表达式为真,整个表达式的结果是左边表达式的值。

如果是一真一假,返回真值表达式的值

如果两个都是假,比如空值和0,返回的是右边的值。(空值或0)

总结一句话就是:无论操作符是哪个,最后的结果一定是按照计算顺序能最快判断出结果的那个表达式决定的

举例:

<img src="https://pic2.zhimg.com/v2-9d62f6dc2dacc24a2b572a3066c96d91_b.png" data-rawwidth="423" data-rawheight="351" class="origin_image zh-lightbox-thumb" width="423" data-original="https://pic2.zhimg.com/v2-9d62f6dc2dacc24a2b572a3066c96d91_r.png">

最新文章

  1. JSTL String时间转成 date
  2. 分布式拒绝服务攻击(DDoS)原理及防范
  3. C语言深入学习系列 - 字节对齐&内存管理
  4. 1020. Tree Traversals (25)
  5. 设计的SOA架构
  6. 【转】在linux内核中读写文件 -- 不错
  7. Jquery函数实现时间显示模式为更新于+被当前时间减去后剩余的时间值(例如:更新于三小时前)的处理。
  8. dom4解析xml格式文件实例
  9. [附录]Discuz X2.5 模板目录结构注释说明
  10. Java入门篇(三)——Java流程控制
  11. 压力测试+接口测试(工具jmeter)
  12. 浏览器数据库 IndexedDB 入门
  13. IntelliJ IDEA使用教程
  14. [转] Anaconda使用总结
  15. Python中random模块在主函数中设置随机种子是否对于调用的函数中的随机值产生影响?
  16. java-代码块-局部代码块、构造代码块、静态代码块
  17. Mac OS X 下安装使用 Docker
  18. 在js中 把 json对象转化为String对象的方法
  19. java rpc
  20. 将你的wordpress博客添加到百度个性首页

热门文章

  1. Android 逆向project 实践篇
  2. jquery 清除style样式
  3. sql server 2008分页
  4. Java的代理模式(通过公共接口实现)
  5. crontab 格式
  6. mysql中char,varchar,text
  7. zabbix 触发器描述列表count
  8. mysql数据库的数据类型及约束
  9. SQLite简单介绍
  10. Form_Form Builder的基本语法(概念)