引子:

print('' or 5 or 0)  #
print(5 and 4) #
print('' or 5 or 0 and 4) #

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

print(bool('')) # False
print(bool(0)) # False
所有变量的位操作都是通过强制转换成bool实现的,并且表达式的值是从左到右第一个能够确定表达式的值的变量。
再看一个布尔运算例子
print(False and True)  # False
print(False and False) # False
print(True and True) # True
print(True and False) # False print(False or True) # True
print(False or False) # False
print(True or True) # True
print(True or False) # True
结合三个例子来看:
(‘’ 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

  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)

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

转载自:https://www.cnblogs.com/huchong/p/7535542.html

Python中的and和or的更多相关文章

  1. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  2. python中的Ellipsis

    ...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...

  3. python中的默认参数

    https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...

  4. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  5. python中的TypeError错误解决办法

    新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个. 在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no ar ...

  6. python中的迭代、生成器等等

    本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...

  7. python2.7高级编程 笔记二(Python中的描述符)

    Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

  8. python cookbook 学习系列(一) python中的装饰器

    简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...

  9. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

  10. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

随机推荐

  1. ACM数论之旅14---抽屉原理,鸽巢原理,球盒原理(叫法不一又有什么关系呢╮(╯▽╰)╭)

    这章没有什么算法可言,单纯的你懂了原理后会不会运用(反正我基本没怎么用过 ̄ 3 ̄) 有366人,那么至少有两人同一天出生(好孩子就不要在意闰年啦( ̄▽ ̄")) 有13人,那么至少有两人同一月 ...

  2. rhel和centos7下更改网卡名称ens33为eth0

    Linux使用小Tips 整理些Linux些常遇到的问题. 修改网卡ens33为eth0 在使用RHEL和Centos7,发现网卡名称变成了EnoX,挺不习惯.现更改回旧名称eth0看着顺眼. 备份/ ...

  3. Task的运行原理和工作窃取

    在net4.0以前,当调用ThreadPool.QueueUserWorkItem方法往线程池中插入作业时,会把作业内容(其实就是一个委托)放到线程池中的一个全局队列中,然后线程池中的线程按照先进先出 ...

  4. 利用ZooKeeper简单实现分布式锁

    1.分布式锁的由来: 在程序开发过程中不得不考虑的就是并发问题.在java中对于同一个jvm而言,jdk已经提供了lock和同步等.但是在分布式情况下,往往存在多个进程对一些资源产生竞争关系,而这些进 ...

  5. 【Linux笔记】ps、kill、netstat、nohup、screen

    1.ps 命令,用于查看当前正在运行的进程,使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占用了过多的资源等等. 语法: ps [options] 示例: p ...

  6. Web前端开发神器--WebStorm(JavaScript 开发工具) 8.0.3 中文汉化破解版

    WebStorm(JavaScript 开发工具) 8.0.3 中文汉化破解版 http://www.jb51.net/softs/171905.html WebStorm 是jetbrains公司旗 ...

  7. BZOJ 2938: [Poi2000]病毒

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 693  Solved: 360[Submit][Status][Di ...

  8. 3:JavaBean,EJB,POJO

    JavaBeanJavaBean是公共Java类,但是为了编辑工具识别,需要满足至少三个条件: 有一个public默认构造器(例如无参构造器,) 属性使用public 的get,set方法访问,也就是 ...

  9. springcloud的fallback与fallbackFactory

  10. jsp的四大作用域

    http://lavasoft.blog.51cto.com/62575/275586/ jsp中四个作用域的区别 JSP内置对象作用域表 名称 作用域 application 在所有应用程序中有效, ...