算数运算符: + - * / // % **
var1=3
var2=4
res=var1+var2 #加法
res=var1-var2 #减法
res=var1*var2 #乘法
res=var1 / var2(结果为小数)
res=var1//var2(地板除整除,只取结果的整数部分,若除数或被除数中有一个是小数则在结果后加上.0)
res=var1%var2(取余)
比较运算符:> < >= <= == !=
比较运算符只会产生两种结果:True 真的,False 假的
res=var1>var2
res=var1<var2
res=var1>=var2
res=var1<=var2
res=var1==var2
res=var1!=var2
赋值运算符: = , += , -= , *= , /=, //=, %=, **=
var=2 # = 从右向左,将右侧的值赋值给左侧变量
var1+=var2 #var1=var1+var2
var1-=var2 #var1=var1-var2
var1=var2 #var1=var1var2
var1 / =var2 #var1=var1 / var2
var1 // =var2 #var1=var1 // var2
var1 %=var2 #var1=var1%var2
var1**=var2 #var1=var1**var2
成员运算符:(针对容器型数据)
in 和not in
(1)strvar='我的梦想是成为一名优秀的程序员'
res='梦想' in strvar #True
res='程序员' not in strvar #False
res='是员' in strvar #False (字符串必须是连续的)
(2)listvar=['my','dream','happy','sad']
res='my' in listvar #True
(3)tuplevar=('my','dream','happy','sad')
res='my' in tuplevar #True
(4)setvar={'my','dream','happy','sad'}
res='my' in setvar #True
(5)dictvar={'Haci':'Lcx','Merry':'Hxl','Gina':'Yxc'}
res='Haci' in dictvar #True
res='Lcx' in dictvar #False , 字典中只能取键,而不能取值
身份运算符:
is和 is not (检测两个数据在内存当中是否是同一个值)
python3.6
(1)整型:-5~正无穷内同值内存id相同
res= 1000 is 1000 # True
res=-6 is -6 #False
(2)浮点型:非负范围内同值内存id相同
res=2.3 is 2.3 #True
res=-2 is -2 #False
(3)布尔型:同值同内存id
res=True is True #True
res=True is False # False
(4)复数:实数+虚数永远不同 (只含正系数的虚数的条件例外)
var1=2+3j
var2=2+3j
res=var1 is var2 #False
(5)容器类型
只有字符串和空元组是同值同id
res=(1,2,3) is (1,2,3) #False
res=() is () #True
逻辑运算符:
and or not
(1)and:逻辑与,全真则真,一假则假
(2)or:逻辑或,全假则假,一真则真
(3)not:逻辑非,真变假,假变真
(4)短路逻辑:如果出现了短路效果,后面的代码不执行
True or 表达式;False and 表达式
#先用大脑算一下布尔值真假,是否出现短路情况,如果出现了直接返回当前值,没出现,继续向右执行;
res=5 or 8 #5
res=0 or 6 #6
res=3 and 4 #4
res=0 and 9 #0
res=not(5 or 6) and 7 #not 5 and 7 =>False and 7=>False
按位运算符:& | ^ << >> ~
关于二进制的计算
(1)按位与 &
var1=19
var2=15
res=var1 & var2 #3
计算原理:
19的二进制: 0000...10011
15的二进制: 0000...01111
按位与: 0000... 00011 ==>3
(2)按位或 |
var1=19
var2=15
res=var1 | var2 #31
19的二进制: 0000...10011
15的二进制: 0000...01111
按位或: 0000...11111 ==>31
(3)按位异或: ^ (两个值不一样,返回真,否则返回假)
var1=19
var2=15
res=var1 ^ var2
19的二进制: 0000...10011
15的二进制: 0000...01111
按位异或: 0000...11100=>28
(4)左移<<
左移相当于做乘法:5*2的n次幂
5 0000...101
res = 5 << 1 # 10 #0000...1010==>10
res = 5 << 2 # 20 #0000...10100==>20
res = 5 << 1 # 40 #0000...101000==>40
(5)右移 >>
右移相当于做除法:5*2的n次幂
5 0000 ... 101
res=5>>1 #0000 ... 010 ==>2
res = 5 >> 2 #0000 ... 001===>1
(5)按位非~:(针对于补码进行操作,按位取反,包括符号位)
按位非每一位都取反,包括符号位,求反码每一位除了符号位,都取反
公式: -(n+1)
var=~19
原码: 0000 ... 10011
反码: 0000 ... 10011
补码: 0000 ... 10011
按位非: 1111...01100
反码: 1000...10011
原码: 1000...10100 ===>-20
var2=~(-22)
原码:1000 ... 10011
反码:1111 ... 01100
补码:1111...01101
按位非:0000...10010
原码:0000...10010===>18
总结:
(1)各类运算符优先级:算数运算符 > 位运算符 > 比较运算符 > 身份运算符> 成员运算符 > 逻辑运算符>赋值运算符
(2)个别运算符:优先级最高 ** 幂运算;优先级最低 = 赋值运算符;() 括号可以提升运算优先级
(3)整体 一元运算符 > 二元运算符
(4)同一层级:
逻辑: () > not > and > or
算数: 乘除 > 加减
res = 17>15 or 78<11 or 7 and 8 and not True is True
=True or False or 7 and 8 and not True is True
=True or False or 7 and 8 and not True
=True or False or False
=True