• 2.7 Python-运算符


    image-20221120003208640

    1. 运算符简介

    运算符用于执行程序代码运算,  Python 程序中运算符按应用场景可分为:
    * 1. 算术运算符
    * 2. 增量赋值运算符
    * 3. 比较运算符
    * 4. 逻辑运算符
    * 5. 成员运算符
    * 6. 身份运算符
    * 6. 按位运算符
    ...
    
    * Python 是强类型语言, 不同类型之间是不可以操作的.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2. 算术运算符

    运算符操作示例
    + 加 (有特殊含义)两个对象相加.1 + 1 = 2
    - 减得到负数或两个数相减.-1, 2 - 0 = 2
    * 乘 (有特殊含义)两个数相乘或重复n次.2 * 2 = 4
    / 除被除数 / 除数 = 商5 / 2 = 2.5
    % 模运算, 求余数被除数 / 除数 = 商···余数5 % 2 = 2···1
    ** 幂底数 ** 指数 = 幂2 ** 3 = 8
    // 整除, 向下取整被除数 / 除数 = 整商9 // 4 = 2(向下取整)
    * 整型  浮点型操作的结果是浮点型, 整型与整型做除法运算结果是浮点型.
    
    • 1
    # 加
    print(1 + 1.1)  # 2.1
    
    # 减
    print(2 - 1.0)  # 1.0
    
    # 乘
    print(2 * 3.0)  # 6.0
    
    # 除
    print(3 / 3)  # 1.0
    
    # 乘方
    print(2 ** 4.0)  # 16.0
    
    # 求余
    print(9 % 2.0)  # 1.0
    
    # 整除
    print(9 // 2)  # 4.5 向下取值4
    print(-9 // 2)  # -4.5 向下取值为5
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    对应内置方法:
    .__add__()         返回 self+value.
    .__radd__() 被加     返回 value+self.
    .__pos__()  加上正号  返回 +self, 默认不显示.
    .__sub__()         返回 self-value.
    .__rsub__() 被减     返回 value-self.
    .__neg__()  加上负号 返回 -self.
    .__mul__()         返回 self*value.
    .__truediv__()     返回 self/value.
    .__rtruediv__() 被除 返回 value/self.
    .__mod__()  求余     返回 self%value.
    .__floordiv__() 整除 返回 self//value.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3. 增量赋值运算符

    运算符描述 (赋值符号左边的值称为’左值’, 其他的都为’右值’)对等
    = 赋值将赋值符号 右边 的值赋值给 左边.
    += 加法赋值n += x, 左值先与右值相加, 在把结果赋值给左值.n = n + x
    -= 减法赋值n -= x, 左值先与右值相减, 在把结果赋值给左值.n = n - x
    *= 乘法赋值n *= x, 左值先与右值相乘, 在把结果赋值给左值.n = n * x
    /= 除法赋值n /= x, 左值先与右值相除, 在把结果赋值给左值.n = n / x
    %= 求余赋值n %= x 左值先与右值求余数, 在把结果赋值给左值.n = n % x
    **= 幂赋值n **= x 左值先与右值求幂, 在把结果赋值给左值.n = n ** x
    //= 整除赋值n **= x 左值先与右值整除, 在把结果赋值给左值.n = n // x
    := 海象运算符可在表达式内部为变量赋值, Python3.8 版本新增.
    a = 1
    print(a)  # 1
    
    a += 1 
    print(a)  # 2
    
    a -= 1
    print(a)  # 1
    
    a *= 2
    print(a)  # 2
    
    a /= 2
    print(a)  # 1.0
    
    b = 2
    b **= 3
    print(b)  # 8
    
    b //= 2
    print(b)  # 4
    
    b %= 3
    print(b)  # 1
    
    print(n := 1)  # 1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    对应内置方法:
    __iadd__ 加法赋值 返回 self+=value.
    __imul__ 乘法赋值 返回 self*=value.
    
    • 1
    • 2
    • 3

    4. 比较运算符

    4.1 比较运算符
    比较运算的返回结果是布尔值 True / False.
    
    • 1
    运算符描述示例
    > 大于判断左侧是否大于右侧.a > b ( a 大于 b )
    < 小于判断左侧是否小于右侧.a < b ( a 小于 b )
    == 等于判断值是否相等.a= b ( a 等于 b )
    != 不等于判断值是否不相等.a != b ( a 不等于 b )
    >= 大于或等于判断左侧是否大于或等于右侧.a >= b ( a 大于或等于 b )
    <= 小于或等于判断左侧是否小于或等于右侧.a <= b ( a 小于或等于 b )
    4.2 数字比较
    print(2 > 1)  # True
    
    print(3 < 4)  # True
    
    print(3 * 2 == 6 * 1)  # True
    
    print(7 != 6)  # True
    
    print(2 >= 2)  # True
    
    print(3 <= 3)  # True
    
    # 连续比较 等于 (3>2) and (2>1)
    print(3 > 1 > 1)  # False
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    对应内置方法:
    .__gt__()  大于        返回 self>
    .__ge__()  大于或等于  返回 self>=value
    .__lt__()  小于        返回 self<
    .__le__()  小于或等于   返回self<
    .__eq__()  等于        返回self==value.
    .__ne__()  不等于      返回 self!=value.
    .__bool__() 不等于0    返回 self!=0.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    4.3 字符比较
    涉及字符串的比较, 则需要转为 Unicode 编码表对应的十进制数来比较.
    
    • 1
    常用字符对应的十进制数.
    字符 | 十进制
    0-9 : 30-39
    A-Z : 65-90
    a-z : 95-122
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 两个字符串按左往右的顺序一位一位的依次做比较, 比较出一次结果就直接返回.
    str1 = 'ABC'
    str2 = 'ABD'
    
    print(str1 > str2)  # False
    
    print(str1 < str2)  # True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    202211111637717

    5. 逻辑运算符

    运算符逻辑表达式描述示例
    and 与x and yx 的值为 Flase , 返回 x 的值, x 的值为 True , 返回 y 的值.1 and 1 值为 1
    or 或x or yx 的值为 True, 返回 x 的值, x 的值为False , 返回 y 的值.1 or 0 值为 1
    not 非not x把 x 的值转为布尔值取反.not False 值为 True
    5.1 短路运算
    可以使用逻辑运算符进行短路运算.
    短路运算的原理: 当多个表达式中, 左边的表达式值可以确定结果时, 
    直接返回最后一个参与运算的值, 不继续往后运算.
    
    • 1
    • 2
    • 3
    # x 为 False 返回 x 的值
    print(0 and 0)  # 0
    print(0 and 1)  # 0
    # x 为 True 返回 y 的值
    print(1 and 0)  # 0
    print(1 and 1)  # 1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # x 的值为False , 返回 y 的值.
    print(0 or 0)  # 0
    print(0 or 1)  # 1
    # x 的值为 True, 返回 x 的值
    print(1 or 0)  # 1
    print(1 or 1)  # 1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    # 取反
    print(not 0)  # True
    print(not 1)  # False
    
    
    • 1
    • 2
    • 3
    • 4
    5.2 练习1
    # 连续运算
    print(1 and 2 and 3)  # 3
    
    print(1 and 0 and 2)  # 0
    #           ↑ 到这里已经能确定结果了, 直接返回这个值.
    
    print(1 and None and 2)
    #            ↑ None 到这里已经能确定结果了, 直接返回这个值.
    
    print(1 or 2 or 3)
    #     ↑ 1 到这里已经能确定结果了, 直接返回这个值.
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    5.3 练习2
    # 比较大小结果是布尔值
    print(7 > 2 or 1)
    #         ↑ True
    
    print(7 + 2 or 1)
    #         ↑ 9
    
    print(1 and 2 or 0)
    #           ↑  2
    
    print(not 1 or 2)
    #              ↑ 2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    5.4 练习3
    当表达式较长时, 加括号区分优先级.
    7 + 2 > 0 and 7 > 6 + 1 or 1 == 1
    
    and优先级最低, 在两变加括号.
    (7 + 2 > 0) and (7 > 6 + 1) or (1 == 1)
    
    * 这种代码几乎不会出现, 一般出现在面试题中.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    print((7 + 2 > 0) and (7 > 6 + 1) or (1 == 1))
    #                                        ↑ True
    
    
    • 1
    • 2
    • 3

    6. 成员运算符

    判断某个个体是否在否个群体当中.
    
    • 1
    运算符描述示例
    in在指定序列中查找值, 找到返回True, 否则返回False.x在y序列中返回True
    not in在指定序列中查找值, 没找到返回True, 否则返回False.x不在y序列中返回True
    str1 = 'abc'
    l1 = ['a', 'b', 'c']
    
    # 字符'a' 在  str1中
    print('a' in str1)  # True
    # 字符'a' 在  l1中
    print('a' in list1)  # True
    
    # 字符'q' 不在  str1中
    print('q' not in str1)  # True
    # 字符'q' 不在  l1中
    print('q' not in list1)  # True
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    7. 身份运算符

    简单来说就是判断两个对象的id值是否相对, id相等就意味着引用相等, 值肯定一样.
    
    • 1
    运算符描述实例
    is判断两个标识符的引用是否为同一个对象.x is x,返回True
    is not判断两个标识符的引用是否为不同对象.x is not x,返回False
    注意 is 与比较运算符 == 的区别:
    is 用于判断两个变量的引用是否为同一个对象,
    == 用于判断变量引用的对象的值是否相等.
    
    • 1
    • 2
    • 3
    # 不可变类型
    num1 = 1
    num2 = 1
    
    # 判断 id 是否相等.
    print(num1 is num2)  # True
    print(num1 is not num2)  # False
    
    # 判断值知否相等
    print(num1 == num2)  # True
    
    # 不可变类型
    list1 = [1, 2, 3]
    list2 = [1, 2, 3]
    
    # 判断 id 是否相等.
    print(list1 is list2)    # False
    print(list1 is not list2)  # True
    
    # 判断值是否相等.
    print(list1 == list2)  # True
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    8. 按位运算符

    运算符描述示例
    & 按位与参与运算的两个值都为 1 结果为 1, 否则都为 0.1 & 1 值为 1
    ❘ 按位或参与运算的有一个值为 1 结果为 1, 否则都为 0.1 ❘ 0 值为 1
    ^ 按位异或参与运算的两个值不同时结果为1, 否则都为 0.1 ^ 0 值为 1
    ~ 按位取反按位取反, 把1变成0, 把0变成1. 规律:~x = -(x+1) , ~-x = (x-1).~ 0 值为 1
    << 左移二进制为全部左移n为, 高位丢弃, 低位补0.num << 2
    >> 右移二进制为全部右移n为, 低位丢弃, 高位补0.num >> 2
    print(1 & 5)  # 1
    """
    1 --> 0001
    5 --> 0101
    ----------
    1 <-- 0001
    """
    
    print(1 | 5)  # 5
    """
    1 --> 0001
    5 --> 0101
    ----------
    5 <-- 0101
    """
    
    print(1 ^ 5)  # 4
    """
    1 --> 0001
    5 --> 0101
    ----------
    4 <-- 0100
    """
    
    # 规律:~x=-(x+1)
    print(~1)  # -2
    
    # 规律:~-x=(x-1)
    print(~-1)  # 0
    
    # 值 << 左移动的位数  等出4
    print(1 << 2)  
    """
    1 --> 0001
    ----------
    4 <-- 0100
    """
    
    # 值 << 右移动的位数  等出4
    print(4 >> 2)  
    """
    4 --> 0100
    ----------
    1 <-- 0001
    """
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    对应内置方法:
    .__and__()     按位与      返回 self&value.
    __or__()       按位或      返回 self|value.
    .__xor__()     按位异或    返回 self^value.
    .__rxor__()    值按位异或  返回 value^self.
    .__invert__()  按位取反    返回 ~self.
    .__lshift__()  左移       返回 self<<value.
    .__rshift__()  右移       返回 self>>value.
    .__rrshift__() 值右移     返回 value>>self.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    9. 运算符优先级

    * 在编写的时候应该人为的规定好优先级, 使用括号进行区分.
    
    • 1
    优先级符号运算
    1**幂, 最高优先级.
    2~ + -按位取反, 一元运算符 加 减.
    3* / % //乘 , 除, 求余, 整除.
    4>> <<右, 左位移.
    5&按位与.
    6^按位异或.
    7按位或.
    8<= < > >=大于等于, 大于, 小于, 小于等于.
    9== !=等于, 不等于.
    10= += -= *= /= %= //= **=赋值, 先(加 减乘 , 除, 求余, 整除 , 幂)计算在赋值.
    11is ,is not身份运算.
    12in not in成员运算.
    13not and or逻辑非, 逻辑与, 逻辑或.

    10. 练习

    1. 什么是左值? 什么是右值?
    2. 什么是成员运算符, 什么是身份运算符?
    3. 自己写表达式时, 如何提高代码的可读性?
    4. 短路运算的原理是什么? 
    
    • 1
    • 2
    • 3
    • 4

    文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.


  • 相关阅读:
    金丝桃素白蛋白纳米粒-大肠杆菌血清抗体复合物|凝血因子Ⅷ人血清白蛋白HSA纳米粒|地奥司明人血清白蛋白纳米粒
    医学影像存储与传输系统(PACS)源码
    CSS基础知识:选择器分类
    爬虫介绍及举例
    手撕链式二叉树(二)—【C语言】
    赛博斗地主——使用大语言模型扮演Agent智能体玩牌类游戏。
    【数学分析】集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
    HDFS系统操作命令大全
    【前端之ES6语法】
    (二十一)数据结构-二叉排序树、平衡二叉树、散列查找
  • 原文地址:https://blog.csdn.net/qq_46137324/article/details/127624608