Python 运算符
1. Python 运算符总览
Python 的运算符完整分类如下(官方语法级别):
A. 算术运算符
+ - * / // % **
B. 比较(关系)运算符
== != > < >= <= is is not
C. 赋值运算符
= += -= *= /= //= %= **= &= |= ^= >>= <<=
D. 逻辑运算符
and or not
E. 位运算符
& | ^ ~ << >>
F. 成员运算符
in not in
G. 身份运算符
is is not(对比对象是否同一块内存)
H. 特殊运算符
:=(海象运算符,Python 3.8+)
至此为全量列表。
2. 各类运算符 —— 详细解释 + 陷阱
A. 算术运算符
| 运算符 | 含义 |
|---|---|
| + | 加法 / 拼接 (str, list) |
| - | 减法 |
| * | 乘法 / 重复(str * 3) |
| / | 真除法(永远返回 float) |
| // | 地板除(向下取整) |
| % | 取模 |
| ** | 幂 |
工程陷阱
/永远返回 float- 地板除
//在负数下表现很容易误解:
-3 // 2 == -2(不是 -1)
B. 比较运算符
== != > < >= <= is is not
注意:
==比较值是否相等is比较内存地址是否相同(对象身份)
工程踩坑示例
a = 257
b = 257
print(a is b) # False
print(a == b) # True
因为 Python 对小整数 [-5, 256] 做了缓存。
C. 赋值运算符
包括复合赋值:
a += 1
a -= 1
a *= 2
a //= 2
a %= 7
a **= 3
复合赋值对可变对象会直接修改原对象:
lst = [1,2]
a = lst
a += [3]
print(lst) # [1,2,3],被修改
D. 逻辑运算符
and or not
Python 逻辑运算返回“最后一个被处理的值”
不是返回 True/False。
核心逻辑:
| 表达式 | 结果 |
|---|---|
| A and B | 若 A 为真 → 返回 B;若 A 为假 → 返回 A |
| A or B | 若 A 为真 → 返回 A;若 A 为假 → 返回 B |
工程中非常重要:用于空值兜底、简化判断。
例:
config_value = user_config or default_config
如果 user_config 是空 / None,则返回 default_config。
E. 位运算符
& | ^ ~ << >>
工业控制、协议解析极为常用(PLC、Modbus、CAN)。
示例:
status = 0b101101
alarm = status & 0b001000 # 掩码检测第三位
F. 成员运算符
in not in
对字符串、列表、字典键等检查成员:
"a" in ["a","b"]
"age" in {"age":18}
G. 身份运算符
is is not
用于判断对象是否完全相同(内存地址一致)。
H. 海象运算符(Python 3.8+)
: = 在表达式内部执行赋值。
if (n := len(data)) > 0:
print("长度:", n)
工程上用于节约重复计算。
3. 工程案例教程(重点)
下面给你多行业常用运算符的工程级用法。
3.1 案例 1:SQL 拼接(避免注入 + or 的使用逻辑)
错误写法(容易 SQL 注入):
sql = f"SELECT * FROM user WHERE name='{name}'"
正确写法:
cursor.execute("SELECT * FROM user WHERE age > %s AND is_active = %s",
(age, True))
or 逻辑在 SQL 拼接场景中的正确用法
用户输入可能为空,用 or 做兜底:
name = input_name or "%"
3.2 案例 2:PLC 数据控制(位运算 + 逻辑运算)
读取设备状态:
status = plc.read_area(...)
# status 是字节数组
run_flag = get_bool(status, 0, 1) # 第二位
err_flag = get_bool(status, 0, 2)
控制写入:
data = bytearray(1)
set_bool(data, 0, 1, True)
plc.write_area(..., data)
位运算解析复杂状态:
mask = 0b001100
alarm = (status_byte & mask) != 0
3.3 案例 3:数据上下限校验(比较运算符 + 逻辑)
你的典型工程代码:
low, high = 0.0, 200.0
if not (low <= value <= high):
print("超限")
逻辑运算符常用于构造可读性强的判断:
if value < low or value > high:
raise ValueError("越界")
3.4 案例 4:模型预测(机器学习)
特征缺失时自动兜底:
temp = row.get("temp") or 0
speed = row.get("speed") or 1
复合赋值实现特征标准化:
x -= mean
x /= std
3.5 案例 5:区块链 / 哈希
低层字节数组计算非常依赖位运算:
def xor_bytes(a, b):
return bytes(x ^ y for x, y in zip(a, b))
Block nonce 搜索:乘法、加法、复合运算大量使用。
4. Python 运算符优先级(完整表)
从高到低:
()x[index] x() x.attr**+x -x ~x* / // %+ -<< >>&^|== != > < >= <= is is not in not innotandor:== += -= ...
工程经验:不要依赖优先级,必要时加括号提升可读性。