• python全栈_003_Python3运算符


    Python语言支持以下类型的运算符:

    算术运算符
    比较(关系)运算符
    赋值运算符
    逻辑运算符
    位运算符
    成员运算符
    身份运算符
    运算符优先级

    接下来让我们一个个来学习Python的运算符。

    1:算术运算符

      以下假设变量a为10,变量b为31;s1="ab",s2="cd"

    运算符描述实例
    + 加 - 两个对象相加   a + b 输出结果 41
      s1+s2 = "abcd"
    - 减 - 得到负数或是一个数减去另一个数   a - b 输出结果 -21
    * 乘 - 两个数相乘或是返回一个被重复若干次的字符串   a * b 输出结果 310
      s1*3="ababab"
    / 除 - x 除以 y   b / a 输出结果 3.1
    % 取模 - 返回除法的余数   b % a 输出结果 1
    ** 幂 - 返回x的y次幂   a**b 为10的31次方
    // 取整除 - 向下取接近除数的整数
     b // a = 3

      -31 // 10 = -4

      9 // 2  = 4

         -9//2    = -5
        (向下取整)

    a = 10
    b = 31
    s1 = "ab"
    s2 = "cd"
    print(a + b)
    print(a - b)
    print(a * b)
    print(b / a)
    print(b % a)
    print(a ** b)
    print(b // a)
    print(-31 // 10)
    print(9 // 2)
    print(9 // -2)
    print(s1 + s2)
    print(s1 * 3)
    Python算术运算符

    2:比较(关系)运算符:

      就是比较两个对象(或者变量)的大小关系:相等,不相等,大于,小于,等等,其比较的结果为布尔型(False 或者True);以下假设变量a为10,变量b为20:

    运算符描述实例
    == 等于 - 比较对象是否相等 (a == b) 返回 False。
    != 不等于 - 比较两个对象是否不相等 (a != b) 返回 True。
    > 大于 - 返回x是否大于y (a > b) 返回 False。
    < 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 True。
    >= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
    <= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 True。

    a = 10
    b = 20
    print(a == b)  #False
    print(a != b)  #True
    print(a > b)   #False
    print(a < b)   #True
    print(a >= b)  #False
    print(a <= b)  #True
    比较运算符

    3:赋值运算符

      以下假设变量a为10,变量b为20:

    运算符描述实例
    = 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
    += 加法赋值运算符 c += a 等效于 c = c + a
    -= 减法赋值运算符 c -= a 等效于 c = c - a
    *= 乘法赋值运算符 c *= a 等效于 c = c * a
    /= 除法赋值运算符 c /= a 等效于 c = c / a
    %= 取模赋值运算符 c %= a 等效于 c = c % a
    **= 幂赋值运算符 c **= a 等效于 c = c ** a
    //= 取整除赋值运算符 c //= a 等效于 c = c // a

      Python中没有像c++中的 ++ 和 -- 运算符,所以在计算加1(或减1)时不能使用 i++(或i--),只能使用 i += 1 or i = i +1 (i -= 1 or i = i -1)

    4:逻辑运算符

    Python语言支持逻辑运算符(类似C++中的 && ,||),以下假设变量 a 为 10, b为 20:

    运算符逻辑表达式描述实例
    and x and y 1:布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
    2:从左到右(x到y)进行判断,当碰到一个值为False时,立即停止后面的判断,返回当前判断的值;如全为True,返回最后一个判断的值。
    3:简单点:当左右两端同时为真, 运算的结果才能是真。
    (a and b) 返回 20。
    or x or y 1:布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。
    2:从左到右(x到y)进行判断,当碰到一个值为True时,立即停止后面的判断,返回当前判断的值;如全为False,返回最后一个判断的值。
    3:有一个为真, 结果就是真。
    (a or b) 返回 10。
    not not x 1:布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。
    2:非真即假, 非假即真.
    not(a and b) 返回 False

      

    a = 0
    b = 20
    c = 10
    def add_c():
        global c
        c += 1
        return c
    print(a and b and add_c() )  # 输出 0 ,判断a为0,即假,立即结束判断,就不会去判断b,不会去调用add_c(),此时c的值还是10
    if a and b and add_c():
        pass
    print(c) #  输出10
    print(a or b or add_c()) #输出 20,判断a为假,继续判断b,b为20,即为真,立即结束判断,返回20,不会去调用add_c(),此时c的值还是10
    if a or b or add_c():
        pass
    print(c)   #  输出10
    
    print('-----------')
    a = 10
    b = 20
    c = 10
    print(a and b and add_c() )  # 输出 11 ,判断a为10,即真,继续判断b,为真,继续调用add_c(),add_c()返回值为11,此时c的值为11
    print(c) #  输出11
    
    print('-----------')
    a = 0
    b = 0
    c = 10
    print(a or b or add_c() )  # 输出 11 ,判断a为0,即假,继续判断b,为假,继续调用add_c(),add_c()返回值为11,此时c的值为11
    print(c) #  输出11
    逻辑表达式执行过程
    逻辑表达式的优先级: () => not => and => or
    c = 10
    def add_c():
        global c
        c += 1
        return c
    
    if 2 and 0 or 9 and 2 and (9 - 2) or 22 and not 0 or add_c():
        print("")
    else:
        print("")
    print(2 and 0 or 9 and 2 and (9 - 2) or 22 and not 0 or add_c())  #输出 7
    print(c) #输出 10
    '''
    () => not => and => or
    2 and 0 or 9 and 2 and (9 - 2) or 22 and not 0 or add_c()  #首先计算 ()中的值(为7),结果在下一行
    2 and 0 or 9 and 2 and 7 or 22 and not 0  or add_c()       #计算not 0 ,为True,结果在下一行
    2 and 0 or 9 and 2 and 7 or 22 and True   or add_c()       #计算and ,结果在下一行
       0    or    2    and 7 or 22 and True  or add_c()
       0    or        7      or    True      or add_c()       #计算or ,结果在下一行,碰到7,即真,立即停止后面的判断,不会调用add_c(),c的值还是10
                     7     结束后面的判断,返回7
    '''
    逻辑表达式的优先级: () => not => and => or

    5:位运算符

      按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:

    下表中变量 a 为 172,b 为 77 二进制格式如下:

    a   = 1010 1100
    b   = 0100 1101
    -----------------
    a&b = 0000 1100  #对应位,只要有一个为0,结果就为0
    a|b = 1110 1101  #对应位,只要有一个为1,结果就为1
    a^b = 1110 0001  #同0,对应位相同就为0,
    ~a =1 1010 1101  # ~a = -(a + 1),~a运算过程如下:
    
    二进制数在内存中以补码的形式存储。
    按位取反:二进制每一位取反,0变1,1变0。
    a   = 1010 1100
    ~a的计算步骤:
    a的二进制:0 1010 1100
    计算补码: 0 1010 1100 (正数的补码,原码为其本身)
    按位取反: 1 0101 0011 (此处标记为"SS";这是补码,需要转换为原码) 
    转换为原码:  
      方法一:取反加1: 
             1 1010 1100  (对标记为"SS"的进行取反;高位为符号位,保持不变)
         +             1
             1 1010 1101  
      方法二:减1取反:
             1 0101 0011  (是标记为"SS"的)
           -           1
             1 0101 0010
        取反:1 1010 1101   (高位为符号位,保持不变)
     
    运算符描述实例
    & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
    | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a | b) 输出结果 237 ,二进制解释: 1110 1101
    ^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 225 ,二进制解释: 1110 0001
    ~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1 (~a ) 输出结果 -173 ,二进制解释: - 1010 1101, 在一个有符号二进制数的补码形式。
    << 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
    a<<n  就是a乘以2的n次方
    a << 2 输出结果 688 ,二进制解释: 10 1011 0000
    172 * 2的2次方  == 172 * 4
    >> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。
    a>>n  就a除以2的n次方
    a >> 2 输出结果 43 , 二进制解释:  0010 1011
    172 // 2的2次方  == 172 // 4

    以下实例演示了Python所有位运算符的操作:

    a = 0b10101100  # 172
    b = 0b01001101  # 77
    print(a,b)
    print(a&b,bin(a&b))
    print(a|b,bin(a|b))
    print(a^b,bin(a^b))
    print(~a,bin(~a))
    print(a,a<<2,bin(a<<2)) # a * (2**2)  688
    print(a,a>>2,bin(a>>2)) # a // (2**2) 43

     异或运算符:两个相同的数 进行异或其结果为0,0 与 a 进行异或其结果是其a本身;(异或运算有许多应用,后期专门总结)

    a = 10
    print(a ^ a) # 输出 0
    print(0 ^ a) # 输出 10

    6:成员运算符

      除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

    运算符描述实例
    in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
    判断x是否在y中
    not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
    a = 10
    b = 20
    list = [1, 2, 3, 4, 5, 6]
    if a in list:
        print('1-in-变量a={0}在给定的列表list={1}中'.format(a, list))
    else:
        print('1-in-变量a={0}不在给定的列表list={1}中'.format(a,list))
    if b not in list:
        print('2-not-in-变量b={0}不在给定的列表list={1}中'.format(b, list))
    else:
        print('3-not-in-变量b={0}在给定的列表list={1}中'.format(b, list))
    for i in list:
        print(i)

    7:身份运算符

      身份运算符用于比较两个对象的存储单元

    运算符描述实例
    is is 是判断两个标识符是不是引用自一个对象

    x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
    判断x,y的内存地址是否相等
    is not is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

      注: id() 函数用于获取对象内存地址。 

      is 与 == 区别:

        is 用于判断两个变量引用对象是否为同一个(判断两个变量的内存地址是否相等于,即id()函数的值是否相等), == 用于判断引用变量的值是否相等。

    a = 20
    b = 20
    print(id(a))
    print(id(b))
    print(id(a) == id(b), a is b, a == b)  # True True True
    
    a = [1, 2, 3]
    b = [1, 2, 3]
    print(id(a))
    print(id(b))
    print(id(a) == id(b), a is b, a == b)  # False False True

    8:运算符优先级

    以下表格列出了从最高到最低优先级的所有运算符:

    运算符描述
    ** 指数 (最高优先级)
    按位翻转,就只有一个一元操作符,并且其单独使用是无意义的
    * / % // 乘,除,取模和取整除
    + - 加法减法
    >> << 右移,左移运算符(右移相当于除,左移相当于乘)
    & 位 'AND'
    ^ | 位运算符
    <= < > >= 比较运算符(比较内存中的值是否相等)
    <> == != 等于运算符(比较内存中的值是否相等)
    = %= /= //= -= += *= **= 赋值运算符
    is ,is not 身份运算符 (就是比较两个变量的内存地址是否相等,即id()函数的返回值是否相等)
    in ,not in 成员运算符(判断x是否在y中)
    and or not 逻辑运算符
  • 相关阅读:
    修改linux的hostname (修改linux系统的IP和hostname)
    linux自动ftp上传与下载文件的简单脚本
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
    用SQL命令查看Mysql数据库大小
    linux screen 命令详解
    mysql常用命令
    Linux 设置mysql开机启动
    源码编译mysql 5.5+ 安装过程全记录
    nagios-plugins安装报错--with-mysql: no
    Spark 中在处理大批量数据排序问题时,如何避免OOM
  • 原文地址:https://www.cnblogs.com/ixuby/p/10068821.html
Copyright © 2020-2023  润新知