全面理解Python运算符

170 阅读5分钟

一、运算符与表达式

1.逻辑运算符

作用:进行设置条件,运算的结果为布尔值

使用:一般结合关系运算符使用

逻辑与:and

​ 表达式1 and 表达式2 :只有当表达式1和表达式2同时成立的时候,则结果为True

逻辑或:or

​ 表达式1 or 表达式2 :当表达式1和表达式2中至少一个成立的时候,则结果为True

逻辑非:notnot 表达式:真---》假 假---》真

1.1逻辑与

代码演示:

"""
真 and 真  = 真
真 and 假 = 假
假 and 真 = 假
假 and 假 = 假
​
"""
num1 = 10
num2 = 20
#逻辑运算符结合算术运算符
if num1 - 10 and num2:
    print("成立")
else:
    print("不成立")
​
#逻辑运算符结合变量
if num1 and num2:
    print("成立")
else:
    print("不成立")
​
#思考问题:逻辑运算符结合赋值运算符使用?-----》不能
#注意:赋值运算符肯定不会出现在条件中
"""
#错误演示
if num1 += 1 and num2 -= 1:
    print("成立")
"""#逻辑运算符结合条件运算符
if num1 > num2 and num1 == num2:
    print("成立")
else:
    print("不成立")
   
   
   

1.2逻辑或

代码演示:

"""
真 or 真  = 真
真 or 假 = 真
假 or 真 = 真
假 or 假 = 假
"""
num3 = 0
num4 = 1
if num3 or num4:
    print("成立")
else:
    print("不成立")
​
​
if num3 > num4 or num3 == num4:
    print("成立")
else:
    print("不成立")
    

1.3逻辑非

代码演示:

"""
not 真 = 假
not 假 = 真
"""
num = 0
if not num:
    print("成立")
else:
    print("不成立")
    
    

1.4短路原则

面试题

出现的时机:在一个表达式中,逻辑运算符不止一个的时候,则会出现短路原则

规律:

​ a.表达式从左到右进行运算,如果第一个逻辑运算符为or,表达式1的值为真,则整个表达式的结果为真

​ 举例:表达式1 or 表达式2 or 表达式3b.表达式从左到右进行运算,如果第一个逻辑运算符为and,表达式1的值为假,则整个表达式的结果为假

​ 举例:表达式1 and 表达式2 and 表达式3

​ c.如果or的左边的逻辑值为假 and的左边的逻辑值为真,则不再遵循短路原则,按照步骤分步计算

代码演示:

 #1.逻辑运算符全部是and----》第一个and的左边为False
def a():
    print("A")
    return False
def b():
    print("B")
    return False
def c():
    print("C")
    return True
def d():
    print("D")
    return False
def e():
    print("E")
    return True#False and False and True and False and True
"""
1.整个表达式的值:False
2.只有a函数被执行,打印的结果为A,其他所有的全部被短路
"""
if a() and b() and c() and d() and e():
    print("ok")
​
#2.逻辑运算符全部是and----》第一个and的左边为True
def a():
    print("A")
    return True
def b():
    print("B")
    return True
def c():
    print("C")
    return False
def d():
    print("D")
    return False
def e():
    print("E")
    return True#True and True and False and False and True
#True and False and False and True   ----->A B
#False and False and True ------>C
"""
1.整个表达式的值:False
2.按照步骤分别操作,最终打印ABC
"""
if a() and b() and c() and d() and e():
    print("ok")
​
#3.逻辑运算符全部是or----》第一个or的左边为True
def a():
    print("A")
    return True
def b():
    print("B")
    return False
def c():
    print("C")
    return True
def d():
    print("D")
    return False
def e():
    print("E")
    return True#True or False or True or False or True
"""
1.整个表达式的值:True
2.打印A
"""
if a() or b() or c() or d() or e():
    print("ok")
​
print("~~~~~~")
​
#4.逻辑运算符全部是or---》第一个or的左边为False
def a():
    print("A")
    return False
def b():
    print("B")
    return False
def c():
    print("C")
    return True
def d():
    print("D")
    return False
def e():
    print("E")
    return True#False or False or True or False or True
#False or True or False or True  ----->AB
#True or False or True ----->C"""
1.整个表达式的值:True
2.打印ABC   ok
"""
if a() or b() or c() or d() or e():
    print("ok")
​
print("~~~~~~")
​
#5.逻辑运算符中的and和or的混合使用
#注意:局部使用短路原则
def a():
    print("A")
    return False
def b():
    print("B")
    return False
def c():
    print("C")
    return True
def d():
    print("D")
    return False
def e():
    print("E")
    return True
def f():
    print("F")
    return True
def g():
    print("G")
    return False
def h():
    print("H")
    return True#False and False and True and False or True and True or False and True
#False or True and True or False and True  ------>A
#True  and True or False and True       ----->E
#True  or False and True       ---->F
"""
1.整个表达式的值:True
2.打印AEF ok555【特殊情况:or的左边是True,则直接短路】
"""
if a() and b() and c() and d() or e() and f() or g() and h():
    print("ok555555")
​
#注意:在实际应用中,一般会出现一个and和一个or,最好能对不同的条件添加括号

2.成员运算符

注意:成员运算符一般在list中使用

in:如果在指定列表中找到某个值,则返回True

not in :如果在指定列表中没有找到某个值,则返回True

3.身份运算符

is:判断两个标识符是否是引用同一个实体

is not:判断两个标识符是否是引用不同的实体

注意:运算的结果为布尔值

代码演示:

a = 10
b = 10if a is b:
    print("yes")
else:
    print("no")
​
if a is not b:
    print("yes")
else:
    print("no")
​
b = 20
if a is b:
    print("yes")
else:
    print("no")
​
if a is not b:
    print("yes")
else:
    print("no")
​
#==
if a == b:
    print("yes~~~~~")
if id(a) == id(b):
    print("yes%%%%%")

总结:
​ a.isid()比较的是变量在内存中的地址
​ b.==比较的是变量的值

4.运算符的优先级

   注意:在实际应用中,尽量不要写过于复杂的表达式,如果有稍微复杂运算的话,尽量通过括号区别优先级