Python 运算符


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)
// 地板除(向下取整)
% 取模
**

工程陷阱

  1. / 永远返回 float
  2. 地板除 // 在负数下表现很容易误解:
    -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 运算符优先级(完整表)

从高到低:

  1. ()
  2. x[index] x() x.attr
  3. **
  4. +x -x ~x
  5. * / // %
  6. + -
  7. << >>
  8. &
  9. ^
  10. |
  11. == != > < >= <= is is not in not in
  12. not
  13. and
  14. or
  15. :=
  16. = += -= ...

工程经验:不要依赖优先级,必要时加括号提升可读性。


文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
评论
  目录