前言
前面两篇文章我们分别介绍了Python的算术运算符、比较运算符合和三目运算符,本篇文章我们来介绍Python的逻辑运算符、成员运算符以及身份运算符 。
逻辑运算符
老规矩,先列出逻辑运算符列表
逻辑运算符 | 含义 | 基本格式 | 说明 |
---|---|---|---|
and | 逻辑与运算,等价于数学中的“且 | a and b | 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假 |
or | 逻辑或运算,等价于数学中的“或” | a or b | 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。 |
not | 逻辑非运算,等价于数学中的“非” | not a | 如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。 |
Python 逻辑运算符可以用来操作任何类型的表达式,不管表达式是不是 bool 类型;同时,逻辑运算的结果也不一定是 bool 类型,它也可以是任意类型。
逻辑运算符一般和比较运算符结合使用,例如:
print(14 > 6 and 90 > 90) # 14大于6为真,90大于90为false,所以整体为false
示例代码如下:
print(3 > 2 and 2 >= 2) # 返回的是bool类型 True and True -->True
print(3 > 2 or 2 > 1) # 返回的是bool类型 Ture and Tue -->True
print(3 > 2 or 2 < 1) # 返回的是bool类型 Ture and False -->True
print(not (3 > 2)) # not True相反结果就是False
a = True
b = True
c = False
d = False
print(a and b) # True
print(a and c) # False
# 连续比较:a>b>c --> a>b and b>c 两者都为True才为True
print(3 > 2 > 1) # True
print(3 > 2 > 2) # 3>2(True) and 2>2(False)
print((3 > 2) > 1) # 加了小括号优先级。True > 1 -->False
print(True == 1) # 1不大于1
# 输出非bool型示例
print(100 and 200)
print(45 and 0)
print("" or "muller")
print(18.5 or "muller")
--------------------------------------------
True
True
True
False
True
False
True
False
False
True
200
0
muller
18.5
成员运算符
成员运算符( in与not in)是Python独有的运算符(全部都是小写的字母),用于判断对象是否是某个集合的元素之一,非常好用,并且运行速度很快。返回的结果是布尔值类型的True或者False。下面是成员运算符的列表。
运算符 | 描述 |
---|---|
in | 判断某个值是否在序列中,在则返回True,反之返回False |
not in | 判断某个值是否不在序列中,不在则返回True,反之返回False |
示例代码如下:
# 成员运算符in in not
name = "moss"
roles = ["刘培强", "图恒宇", "张鹏", "周喆直","moss"]
# 判断moss在roles中则返回True
print(name in roles)
# 判断moss不在roles中则返回True
print(name not in roles)
----------------------------------
输出结果如下:
True
False
身份运算符
身份运算符(is、is not)和成员运算符一样,也是Python的特色语法。身份运算符用来判断的两个对象的存储单元是否相同的一种运算符号,身份运算符只有is和is not两个运算符,返回的结果都是TRUE或者FALSE。下面是身份运算符的列表:
运算符 | 描述 |
---|---|
is | 判断两个数据引用对象否一致,一致则返回True |
not | 判断两个数据引用对象是否不一致,不一致则返回True |
示例代码如下:
a=3
b=2
c=a
print(a is b)
print(a is c)
-------------------------
输出结果如下:
False
True
a、b这两个变量的储存的内容不一样,所以储存单元肯定不一致,但是c和a的其实都是3,这两个变量的存储单元其实是一致的,这个应该比较容易理解。
上方例子若将is改为is not,则输出的结果与上面相反。
若a,b都为列表,a=[0,1,2],b=[1-1,2-1,3-1],变量b通过运算后得出的列表也是[0,1,2],这很好理解,但是这里我们有两个问题:
- a引用的对象是否跟b是一致的呢?
- 如果c=a,a和c引用的对象又是否一致呢?
我们运行代码来获取结果:
a=[0,1,2]
b=[1-1,2-1,3-1]
c=a
print(a)
print(b)
print(a is b)
print(a is c)
---------------------------
输出结果如下:
[0, 1, 2]
[0, 1, 2]
False
True
结果我们发现,a和b引用的对象是不一致的,所以a is b输出的结果是FALSE,因为变量b是需要计算的,虽然计算之后得到的列表跟a一模一样,但是计算之前的过程每个元素是要存储的,变量a当中的元素都是数字,计算机是直接存储结果的,而变量b当中的每个元素都是表达式,表达式的储存跟单个元素的储存是不一致的,列表、元组都是如此。
(注意:可计算出结果的纯数值表达式仍然是直接储存结果值)
is与==的区别
双等号是比较运算符,用来判断左右两边的数据是否相等,那么is和双等号在应用时是否一样呢?我们还是接着上面的按个例子,如果我们用“==”来判断a、b、c三个变量是否相等,代码演示如下:
a=[0,1,2]
b=[1-1,2-1,3-1]
c=a
print(a is b)
print(a is c)
print(b is c)
print(a is b is c)
print(a==b==c)
--------------------
输出结果如下:
False
True
False
False
True
通过运行结果,我们看到用双等号进行判断是,只要最终的值是一致的用双等号进行比较运算结果就是TRUE,而is则必须引用同一对象返回结果才为TRUE,否则就是FALSE,这就是is和“==”的区别,使用这两个运算符时不能混淆,因为实现的功能是不一样的。
总结
本篇文章我们介绍了逻辑运算符,成员运算符和身份运算符的使用,我们特别要注意一般情况下,这三种运算符输出的都是bool值,我们也要注意==号与is的区别。下一篇文章,我们将介绍赋值运算符,位运算符和运算符优先级。