Python 运算符详解

成员运算符 (in, not in)

基本用法

用于判断元素是否存在于某个容器中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 字符串判断
print("bage" in "I am bage") # True - 判断子字符串是否存在
print("b" in "I am bage") # True - 判断单个字符是否存在

# 列表判断
print(111 in [111, 222, 333]) # True - 判断元素是否在列表中

# 字典判断
print("key1" in {"key1": 111, "key2": 222}) # True - 判断key是否存在
print(111 in {"key1": 111, "key2": 222}) # False - 注意:字典默认判断key,不是value

# 反向判断
print("keke" not in "I am bage") # True - 判断不存在
print(not "keke" in "I am bage") # True - 效果相同但不推荐

注意事项

  1. 字典的 in 操作默认检查 key 不是 value
  2. not in 是推荐的否定形式,比 not ... in ... 更清晰

身份运算符 (is, is not)

基本用法

用于比较两个对象的 内存地址 是否相同(即是否是同一个对象)

1
2
3
4
5
6
7
8
9
10
11
12
x = 10
y = 11
print(x is y) # False - 不同对象

# 特殊案例
a = 256
b = 256
print(a is b) # True - Python对小整数有缓存优化

c = 257
d = 257
print(c is d) # False - 超出缓存范围

== 的区别

运算符 比较内容 示例
is 内存地址 x is y
== 值相等 x == y
1
2
3
4
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 == list2) # True - 值相同
print(list1 is list2) # False - 不同对象

使用场景

  1. 判断 None 时推荐使用 is

    1
    2
    if x is None:
    pass
  2. 检查布尔值时更清晰

    1
    2
    if success is True:
    pass

总结表格

运算符类型 运算符 作用 适用容器
成员运算符 in 判断元素是否存在 str/list/dict/set/tuple
not in 判断元素不存在 同上
身份运算符 is 判断是同一对象 所有对象
is not 判断不是同一对象 所有对象