算数运算符: +   -   *   /   //   %   **

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2020-07-02 21:24  HaCi-25  阅读(145)  评论(0编辑  收藏  举报