zoukankan      html  css  js  c++  java
  • Python学习系列之运算符及运算符的优先级(六)

    一、Python中的运算符包括:

        算术运算符
        赋值运算符
        比较运算符
        布尔运算符
        位运算符
        其中算术运算符包含:标准算术运算符,取余运算符(%)、幂运算符(**)

        标准运算符包括:加(+)、减(-)、乘(*)、/、整除(//)

     1、Python算术运算符的使用

    #加法运算
    print(1+1)
    #减法运算
    print(4-1)
    #乘法运算
    print(3*2)
    #除法运算
    print(11/2)
    #整除运算
    print(11//2)
    #取余运算
    print(11%2)
    #幂运算
    print(11**2) #表示11的2次方

      以上执行结果如下:

    解析:当出现除数和被除数为负数是,会有两种情况,一种是同为负数或一负一正,当一负一正时整除,会获取整数值,当同为负数时,

    整除运算有负数情况举例:

    print(9//4)     #同为正数,取整
    print(-9//-4)   #同为负数,取整
    print(9//-4)    #一正一负整除,向下取整,除的结果是-2.25,所以结果是-3
    print(-9//4)    #一正一负整除,向下取整,除的结果是-2.25,所以结果是-3
    

      执行结果如下:

     取余运算有负数情况举例:

    print(9%-4)     #值为-3,计算公式:余数=被除数-除数*商  9-(-4)*(-3)=9-12=-3
    print(-9%4)     #值为3,计算公式:余数=被除数-除数*商  (-9)-(4)*(-3)=(-9)-(-12)=(-9)+12=3
    

      运行结果如下图:

    2、Python赋值运算符

    赋值运算符
      执行顺序:右到左
      支持链式赋值,如a=b=c=0
      支持参数赋值,如+=、-=、*=、/=、//=、%=
      支持系列解包赋值,a,b,c=10,20,30

    举例:

    #赋值运算符
    i=3+5
    print(i)
    
    #链式赋值
    a=b=c=10
    print(a,id(a))
    print(b,id(b))
    print(c,id(c))
    

      执行结果如下:

     解析:1、i=3+5,首先将3+5进行运算得出8,再将8赋值给变量i

        2、将a、b、c三个变量都赋值为10,这三个变量值都是10,同时指向同一个内存空间

    如果将链式赋值分开写,也会是同样的结果,即都是执行同一个内存空间,该内存空间的值是10

    a=10
    b=10
    print(a,id(a))
    print(b,id(b))
    

      执行结果如下:

    2、参数赋值

    #参数赋值
    a=30
    a+=20 #a=a+20
    print(a,type(a))
    a-=10 #a=a-10
    print(a,type(a))
    a*=2 #a=a*2
    print(a,type(a))
    a/=2 #a=a/2
    print(a,type(a))
    a//=2 #a=a//2
    print(a,type(a))
    a%=2 #a=a%2
    print(a,type(a))

      执行结果如下:

    3、解包赋值

    3.1 常用模式a,b,c=10,20,30,意思是将10赋值给a,将20赋值给b,将30赋值给c

    举例:

    a,b,c=10,20,30
    print(a,b,c)
    

      执行结果如下:

     即分别将10赋值给a,将20赋值给b,将30赋值给c

    3.2 解包赋值要求=号两边的数量保持一致

    举例:

    a,b=10,20,30
    

      执行结果如下:

     由此可以看出,当使用解包赋值时,两边的变量或者值不一致是会报错

    3.3 解包赋值可以直接交换两个变量的值,不需要中间变量

    举例:

    #解包赋值可以交换两个变量的值
    a,b=10,20
    print('交换之前的值:',a,b)
    a,b=b,a
    print('交换之后的值:',a,b)
    

      执行结果如下:

     解析:直接将变量赋值按位置赋值给对应的变量,无需中间变量

     4、Python中的比较运算符

    4.1 比较运算符输出的是bool值,即是比对是对(True)还是错(False)

    举例:

    #比较运算符
    a,b=10,20
    print('a>b吗?',a>b)
    print('a<b吗?',a<b)
    print('a<=b吗?',a<=b)
    print('a>=b吗?',a>=b)
    print('a=b吗?',a==b)
    print('a!=b吗?',a!=b)  

    执行结果如下:

     4.2 比较运算是比较值还是比较存储标识?

    '''
    一个 = 称为赋值运算符,==称为比较运算符
    一个变量由三部分组成,标识、类型、值
    == 比较的是值还是标识呢? 比较的是值
    比较对象的标识使用 is
    
    '''
    a=10
    b=10
    print(a==b)
    print(id(a))
    print(id(b))
    print(a is b)
    print(a is not b)

    以上代码执行结果是:

     解析:1.a和b的值相同,都是10

        2.a和b的内存空间是同一个,即内存标识是同一个,因为内存中已经有一个一模一样的值的存储空间,不会再新建一个空间,而是直接将变量的标识符指向已有的内存空间,所以a和b的内存标识是一样的,所以比对结果是True

        3.a和b的内存空间是同一个,所以is not比对结果是False

    4.3 两个值相同的List列表会是同一个空间吗?

    举例:

    #比对list的值和内存空间
    list1=[11,22,33,44] list2=[11,22,33,44] print(list1==list2) print(list1 is list2) print(id(list1)) print(id(list2))

      执行结果如下:

     解析:1.list1和list2的值是相同的,所以比对结果是True

        2.list1和list2的内存空间id是不相同的,所以结果是False

    5、bool运算符

    bool运算符有:and、or、not、in、not in

     5.1、bool运算and运算

    举例:

    #bool运算符and运算
    a,b=1,2
    print(a==1 and b==2)       #True and True --> True
    print(a==1 and b<2)        #True and False --> False
    print(a!=1 and b==2)       #False and True --> False
    print(a!=1 and b!=2)       #False and False --> False
    

      执行结果如下图:

     解析:and运算只有当两个都是True时,才是True,只要有一个False则结果都是False。and可以理解为并且或者全部。

    5.2、bool运算符or运算

    举例:

    #bool运算符or运算
    a,b=1,2
    print(a==1 or b==2)       #True and True --> True
    print(a==1 or b<2)        #True and False --> True
    print(a!=1 or b==2)       #False and True --> True
    print(a!=1 or b!=2)       #False and False --> False
    

      执行结果如下:

     解析:or运算中,当其中一个运算为True时结果为True,两个值都为False时才为False。or可以理解为或。

    5.3、bool运算符not运算

    举例:

    #bool运算符not运算,即取反
    a1=True
    a2=False
    print(not a1)
    print(not a2)
    

      执行结果如下:

    解析:a1的值为True,取反的结果就是False,a2的值是False,取反的结果就是True

    5.4 bool运算符in、not in运算,即是否在里面

    举例:

    #bool运算符in、not in运算,即是否在里面
    a='hellworld'
    print('h' in a)
    print('k' in a)
    print('h' not in a)     #False
    print('k' not in a)     #True
    

      执行结果如下:

     解析:1. h在helloworld单词里,则in运算执行结果为True,not in运算结果为False

        2. k不在helloworld单词里,则执行结果为False,not in运算结果为True

        

    6、位运算符

    位运算符有位与&、位或|、左移、右移。

     6.1 按位与和按位或举例:

    #位运算
    print(4&8)      #按位与&,同为1时结果为1,否则为0
    print(4|8)      #按位或|,同为0时结果为0,否则为1
    

      执行结果为:

     解析:1.4的二进制00000100,8的二进制是00001000,按位与的结果是00000000即0,按位或的结果是00001100即12

     6.2 左右位移运算:

    图解:

     解析:4的二进制是0000100,左位移时高位溢出一位,低位少一位需要补零,4左位移的结果是00001000即是8,左位移一位相当于乘以2

        8的二进制是00001000,再左位移时高位溢出一位,低位少一位需补零,8左位移的结果是00010000即16,左位移一位相当于乘以2

     解析:4的二进制是0000100,右位移时低位截断一位,高位少一位需要补零,4右位移的结果是00000010即是2,右位移一位相当于除以2

        2的二进制是00000010,再右位移时低位截断一位,高位少一位需要补零,2右位移的结果是00000001即1,右位移一位相当于除以2

    代码举例:

    #左右位移
    print(4<<1)     #4左移一位,相当于乘以2,结果是8
    print(4<<2)     #4左移二位,相当于乘以4,结果是16
    print(4>>1)     #4右移一位,相当于除以2
    print(4>>2)     #4右移二位,相当于除以4
    

      执行结果如下:

    7. 运算符的优先级

    运算符优先级规则:

    1、有括号先计算括号

    2、优先级第二高的是算术运算符,算术运算符中优先计算乘除,再计算幂,再计算加减

    3、优先级第三高的是位运算符,先计算位移,再计算按位或,最后计算按位与

    4、优先级第四高的是比较运算,比较运算的结果是bool值

    5、优先级最低的是bool运算,优先and和赋值运算,再执行or运算  

  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/wx170119/p/14004476.html
Copyright © 2011-2022 走看看