【运算符知识点 及优先级使用 总结】

目录

一、运算符分类概览

二、核心运算符详解

1. 算术运算符

2. 比较运算符

3. 逻辑运算符

4. 位运算符(二进制级操作)

5. 赋值运算符

(1) 基础赋值

(2) 海象运算符 :=(Python 3.8+)

6. 成员运算符

7. 身份运算符

三、高级技巧与陷阱

1. 运算符优先级问题

2. 运算符重载(面向对象)

3. 特殊场景处理

四、应用场景总结

五、最佳实践

运算符 优先级 知识点总结

Python 运算符优先级知识点总结

一、优先级总览(从高到低)

二、关键优先级规则详解

1. 括号优先级最高

2. 幂运算(**)高于乘除

3. 乘除优先级高于加减

4. 逻辑非(not) > 逻辑与(and) > 逻辑或(or)

5. 比较运算符 > 身份/成员运算符 > 逻辑运算符

6. 赋值运算符优先级最低

三、常见优先级陷阱与案例

陷阱1:逻辑运算符优先级混淆

陷阱2:位移与算术运算混淆

陷阱3:海象运算符的优先级

四、最佳实践与注意事项

五、优先级应用场景总结


以下是由浅入深、全面系统的 Python 运算符知识点总结,涵盖基础概念、进阶用法、典型场景及实战技巧,附带案例和逻辑解析:


一、运算符分类概览

Python 运算符分为 7 大类,按优先级从高到低排列:

类别运算符示例优先级顺序
算术运算符+-***//最高(括号优先)
位运算符&, `^<<>>`次高
比较运算符==!=><>=中等
布尔运算符notandor较低
赋值运算符=+=%=:=最低
成员运算符innot in中等
身份运算符isis not中等

二、核心运算符详解

1. 算术运算符

a, b = 10, 3

print(a + b)   # 13 → 加法
print(a - b)   # 7  → 减法
print(a * b)   # 30 → 乘法
print(a / b)   # 3.333... → 浮点除法
print(a // b)  # 3  → 整除(向下取整)
print(a % b)   # 1  → 取余(余数符号与除数一致)
print(a ** b)  # 1000 → 幂运算

注意事项

  • 负数整除:-10 // 3 = -4(向下取整)

  • 浮点精度陷阱:0.1 + 0.2 != 0.3(用 Decimal 模块解决)


2. 比较运算符

x, y = 5, 7

print(x == y)   # False → 等于
print(x != y)   # True  → 不等于
print(x > y)    # False → 大于
print(x <= y)   # True  → 小于等于

# 链式比较(Python 独有)
print(1 < x < 10)  # True → 等价于 1 < x and x < 10

3. 逻辑运算符

a, b = True, False

print(a and b)  # False → 逻辑与(全真为真)
print(a or b)   # True  → 逻辑或(一真即真)
print(not a)    # False → 逻辑非

# 短路求值特性
def check():
    print("函数执行")
    return True

print(False and check())  # 输出 False,函数未执行
print(True or check())    # 输出 True,函数未执行

4. 位运算符(二进制级操作)

a = 0b1010  # 10
b = 0b1100  # 12

print(bin(a & b))  # 0b1000 → 按位与(同1为1)
print(bin(a | b))  # 0b1110 → 按位或(有1为1)
print(bin(a ^ b))  # 0b0110 → 按位异或(不同为1)
print(bin(~a))     # -0b1011 → 按位取反(补码表示)
print(a << 2)      # 40 → 左移两位(相当于乘4)
print(b >> 1)      # 6  → 右移一位(相当于整除2)

应用场景

  • 权限系统(用位掩码组合权限)

  • 高性能算法优化(如布隆过滤器)


5. 赋值运算符

(1) 基础赋值
x = 5
x += 3    # x = 8
x **= 2   # x = 64
(2) 海象运算符 :=(Python 3.8+)
# 在表达式内部赋值
if (n := len("hello")) > 3:
    print(n)  # 输出: 5

# 简化循环读取操作
while (line := input()) != "quit":
    print(line)

6. 成员运算符

lst = [1, 2, 3]
dct = {"name": "Alice", "age": 30}

print(2 in lst)          # True → 检查元素存在性
print("name" in dct)     # True → 检查字典键
print("Alice" in dct)    # False → 不检查字典值

7. 身份运算符

a = [1, 2]
b = [1, 2]
c = a

print(a == b)  # True → 值相等
print(a is b)  # False → 不同对象
print(a is c)  # True → 同一对象

# 小整数池优化(-5~256)
x, y = 256, 256
print(x is y)  # True → 缓存复用

x, y = 257, 257
print(x is y)  # False → 新建对象

三、高级技巧与陷阱

1. 运算符优先级问题

result = 5 + 3 * 2 ** 2  # 5 + (3*(2^2)) = 17
result = (5 + 3) * 2 ** 2  # (8)*4 = 32 → 用括号明确优先级

2. 运算符重载(面向对象)

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)
    
    def __str__(self):
        return f"({self.x}, {self.y})"

v1 = Vector(2, 3)
v2 = Vector(4, 5)
print(v1 + v2)  # 输出: (6, 8)

3. 特殊场景处理

# 空值判断
val = None
print(val is None)  # True → 正确判断空值

# 避免 is 误用
a = 1000
b = 1000
print(a == b)  # True
print(a is b)  # False(超出小整数池范围)

四、应用场景总结

运算符类型典型应用场景性能优势
算术运算符数学计算、数据转换基础运算高效
位运算符二进制处理、权限系统极高性能
成员运算符容器元素检查、字典键验证快速查找
海象运算符简化循环和条件表达式代码简洁
运算符重载自定义对象操作(如向量运算)提高代码可读性

五、最佳实践

  1. 优先使用 == 而非 is:除非明确需要检查对象身份

  2. 活用括号明确优先级:避免隐式运算顺序导致错误

  3. 注意可变对象操作:如 += 对列表的原地修改

    lst = [1, 2]
    lst += [3]     # 原地修改 → lst = [1, 2, 3]
    lst = lst + [4]  # 创建新对象 → 效率较低
  4. 防御性编程:对可能为 None 的值使用 is None 判断


掌握这些知识点后,您将能:

  • 写出更高效、易读的 Python 代码

  • 避免常见的运算符使用陷阱

  • 在算法优化和面向对象编程中灵活运用运算符特性

运算符 优先级 知识点总结


Python 运算符优先级知识点总结精讲

一、优先级总览(从高到低)

以下是常见运算符优先级排序,括号 () 始终具有最高优先级

优先级运算符类别运算符示例
1括号()
2幂运算**
3按位取反、算术符号~x+x-x(正负号)
4乘、除、取余、整除*/%//
5加、减+-
6位移运算<<>>
7按位与&
8按位异或^
9按位或``
10比较运算符==!=<><=>=
11身份运算符isis not
12成员运算符innot in
13逻辑非not
14逻辑与and
15逻辑或or
16赋值运算符=+=-=:=(海象运算符)

二、关键优先级规则详解
1. 括号优先级最高
result = (3 + 5) * 2   # 先计算括号内 → 8 * 2 = 16
print(result)          # 输出: 16
2. 幂运算(**)高于乘除
result = 3 + 5 ** 2 * 2  # 等价于 3 + (25 * 2) = 53
print(result)            # 输出: 53
3. 乘除优先级高于加减
result = 5 + 3 * 2 - 4 / 2  # 等价于 5 + 6 - 2.0 = 9.0
print(result)               # 输出: 9.0
4. 逻辑非(not) > 逻辑与(and) > 逻辑或(or
print(not True and False)  # 等价于 (not True) and False → False
print(False or True and True)  # 等价于 False or (True and True) → True
5. 比较运算符 > 身份/成员运算符 > 逻辑运算符
x = 5
print(1 < x < 10 and x is not None)  # 等价于 (1 < x < 10) and (x is not None) → True
6. 赋值运算符优先级最低
a = 5
a += 3 * 2  # 等价于 a = a + (3 * 2) → 5 + 6 = 11
print(a)    # 输出: 11

三、常见优先级陷阱与案例
陷阱1:逻辑运算符优先级混淆
# 预期:若 x 不在 [1,3] 区间则输出 False
x = 2
print(not x > 1 and x < 3)  # 实际等价于 (not (x > 1)) and (x < 3) → False
# 正确写法:
print(not (x > 1 and x < 3))  # 输出: False(但逻辑意图更明确)
陷阱2:位移与算术运算混淆
print(8 >> 1 + 1)  # 等价于 8 >> (1 + 1) → 8 >> 2 = 2(不是 (8 >> 1) + 1 = 5)
陷阱3:海象运算符的优先级
# 海象运算符 := 的优先级仅高于赋值运算符
if (n := 5) > 3 and n < 10:  # 正确写法:括号明确优先级
    print(n)  # 输出: 5

四、最佳实践与注意事项
  1. 优先使用括号
    即使知道默认优先级,显式括号能提升代码可读性:

    # 模糊写法
    result = x * 2 + y ** 3 / z
    
    # 清晰写法
    result = (x * 2) + ((y ** 3) / z)
  2. 避免复杂表达式
    拆分多步运算,避免单行代码包含过多运算符:

    # 不推荐
    total = a + b * c - d / e + f ** g
    
    # 推荐
    temp1 = b * c
    temp2 = d / e
    temp3 = f ** g
    total = a + temp1 - temp2 + temp3
  3. 注意运算符结合性
    同级运算符按从左到右顺序计算(幂运算 ** 除外,从右到左):

    print(2 ** 3 ** 2)  # 等价于 2^(3^2) = 512(不是 (2^3)^2 = 64)
  4. 特殊值的优先级处理
    如 None 判断应使用 is 而非 ==

    val = None
    print(val is None)  # True(正确)
    print(val == None)  # True(但可能触发 __eq__ 重载问题)

五、优先级应用场景总结
场景关键运算符优先级示例
数学公式计算括号 > 幂 > 乘除 > 加减(a + b) * c ** 2
条件判断组合比较 > 逻辑非 > 逻辑与 > 逻辑或x > 5 and not y or z
位操作与算术混合位移 > 按位与/或 > 算术运算(a << 2) & 0xFF + b
容器操作与逻辑判断成员检查 > 逻辑运算符key in dct and dct[key] > 0

掌握运算符优先级,能帮助您:

  • 编写更高效、准确的代码

  • 快速定位表达式计算顺序错误

  • 提升代码可读性和维护性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值