Python中的and和or

枫铃3年前 (2021-08-07)Python243

引子:

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

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

print(bool('')) # False
print(bool(0)) # False

所有变量的位操作都是通过强制转换成bool实现的,并且表达式的值是从左到右第一个能够确定表达式的值的变量。

再看一个布尔运算例子

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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)    输出1True 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)

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

相关文章

python输入一个\输出2个\问题

在Python里面,如果\后面不是一个合法的转移字符,那么,Python会打印两个\,换句话说...

Python——有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

Python——有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

用python做一个简单的数字题,希望多初学者带来一点点帮助 第一种方式: for x in range(1,5):...

python函数调用的四种方式

第一种:参数按顺序从第一个参数往后排#标准调用 # -*- coding: UTF-8 -*- def normal_invoke(x,...

Python 中的属性访问与描述符

在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作。例如,有一个类实例对象foo&...

315道Python常见面试题

315道Python常见面试题

第一部分,Python基础篇 为什么学习Python? 通过什么途径学习的Python? Python...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。