python学习_运算符

一、python中的常用运算符

  •  算术运算符

 需要注意的是一正一负的整除运算和取余运算

算数运算符的优先级:幂运算(**)>乘除、整除和取余(*、/、//、%)>加减(+、-)

  • 赋值运算符

#赋值运算符,运算顺序从右到左
i=3+4
print(i)    #结果为7,运算顺序是从右到左,所以先计算右边的,在赋值给左边的i
#链式赋值
a=b=c=20     #将20赋值给变量c、将20赋值给变量b,将20赋值给变量a
print(a,id(a))   #20 140723822683376
print(b,id(b))   #20 140723822683376
print(c,id(c))   #20 140723822683376

链式赋值的内存示意图(三个变量都指向20):

#参数赋值
a=20
a+=30   #相当于a=a+30,也就是a+30后赋值给a
print(a)   #50
a-=10    #相当于a=a-10,也就是a-10后赋值给a
print(a)   #40
a*=2     #相当于a=a*2,也就是a*2后赋值给a
print(a,type(a))   #80  <class 'int'>
a/=3      #相当于a=a/2,也就是a/2后赋值给a
print(a,type(a))   #26.666666666666668  <class 'float'>
a//=2     #相当于a=a//2,也就是a//2后赋值给a
print(a,type(a))   #13.0  <class 'float'>
a%=3    #相当于a=a%3,也就是a%3后赋值给a
print(a,type(a))    #1.0   <class 'float'>
#解包赋值
a,b,c=20,30,40   #相当于将20赋给a,30赋给b,40赋给c   注意:解包赋值左边变量的个数要和右边值的个数相等
print(a,b,c)     #20 30 40

解包赋值交换两个变量的值

a,b=10,20

a,b=b,a

print(a,b)
  • 比较运算符:对变量或者表达式的结果进行大小、真假等比较,它的结果是一个布尔类型

#比较运算符
a,b=10,20
print("a大于b吗?",a>b)   #False
print("a小于b吗?",a<b)   #True
print("a大于等于b吗?",a>=b)  #False
print("a小于等于b吗?",a<=b)  #True
print("a不等于b吗?",a!=b)   #True
print("a等于b吗?",a==b)    #False

'''一个=号叫做赋值运算符,两个==号叫做比较运算符
一个变量由三部分组成:标识ID、类型type、值value
那==比较的是标识还是值呢?    比较的是值value
比较对象的标识使用 is
'''

#比较两个对象的标识
n1=10
n2=10
print(n1==n2)   #True,说明n1与n2的值相等
print(n1 is  n2)  #True,说明n1与n2的标识相等,都是指向的内存中同一块内存空间(数值10)
list1=[11,22,33,44]
list2=[11,22,33,44]
print(list1==list2)  #True,说明list1和list2两个列表的值相等
print(list1 is list2) #False,list1与list2两个列表的标识不相等
print(id(list1))   #2272722379400
print(id(list2))   #2272722379464
print(list1 is not list2)  #True,is not的意思是list1与list2的id不相等,由于两个的id标识确实是不相等所以结果为True
print(n1 is not n2) #False,这里的意思是n1与n2的id不相等,由于n1与n2的id是相等的,所以结果为False
  •  布尔运算符(也叫逻辑运算符,是对布尔值之间进行运算)

not是对布尔类型的操作数取反

#布尔运算符
a,b=1,2
print("---------and运算 并且------------")
print(a==1 and b==2)   #True
print(a==1 and b<2)    #False
print(a!=1 and b==2)   #False
print(a!=1 and b!=2)   #False

print("---------or运算 或者------------")
print(a==1 or b==2)   #True
print(a==1 or b<2)    #True
print(a!=1 or b==2)   #True
print(a!=1 or b!=2)   #True

print("---------not运算 对bool类型的操作数取反------------")
f=True
f2=False
print(not f)    #False
print(not f2)   #True

print("----------in 与not in-------")
s="helloword"
print('w' in s)   #True
print('m' in s)   #False
print('h' not in s)  #False
print('k' not in s)  #True

注意:当and和or运算符两边的操作数不是bool值或者表达式时,and和or的运算要遵循一个短路逻辑:如4 and 3,结果为3

print(3 and 4)   #4,因为3的真值为True,要确定and的运算结果,还需要确定第二个操作数,所以python直接返回第二个操作数4
print(0 and 4)   #0,因为0的真值为False,可以直接确定and的运算结果,不需要知道第二个操作数,所以python直接返回0
print(3 or 4)    #3,因为3的真值为True,不需要知道第二个操作数,直接可以确定or结果,所以python直接返回3
print(0 or 4)    #4,因为0的真值为False,要确定or的运算结果,还需要知道第二个操作数,所以python直接返回第二个操作数4
print("abc" and "edf") #edf,因为abc的真值为True,要确定and的运算结果,还需要确定第二个操作数,所以python直接返回第二个操作数edf
print('abc' or 'edf') #abc,因为abc的真值为True,不需要知道第二个操作数,直接可以确定or结果,所以python直接返回abc
print('' or 'edf')   #edf,因为''的真值为False,要确定or的运算结果,还需要知道第二个操作数,所以python直接返回第二个操作数edf
print('' and 'edf')  #返回为空,因为''的真值为False,可以直接确定and的运算结果,不需要知道第二个操作数,所以python直接返回空


布尔运算符的优先级:in/not in >not>and>or

  •  位运算符(也就是将数据转成二进制来进行的计算就叫位运算)

#位运算
print(4&8)   #0,将4和8都转成二进制进行计算,对应位数都为1才会为1
print(4|8)    #12,将4和8转成二进制进行计算,对应位数都为0才会为0
print(4<<1)   #8,4转成二进制以后左移一位(向左移动一个位置),超出8位后的高位溢出,低位缺失的补0
print(4<<2)   #16,4转成二进制以后左移两位
print(4>>1)   #2,8转成二进制以后右移一位,高位缺失的补0,低位超出的溢出
print(4>>2)   #1,8转成二进制以后右移两位

 注:所以,通过上面可知,每左移1位相当于乘以2,每右移1位相当于除以2

位运算符的优先级:>>/<< (移位)> & (与)> | (或)

二、运算符的优先级(从高到低排序)

posted @ 2023-07-07 17:53  机智的老猫咪  阅读(68)  评论(0编辑  收藏  举报