17、Python对象操作全解析:同一运算符、成员运算符与整数缓存机制实战
适合人群:零基础自学者 | 编程小白快速入门
阅读时长:约8分钟
文章目录
- 一、问题:Python 同一运算符的本质与实战?
- 1、例子1:双胞胎身份证验证
- 2、答案:
- (1)is 同一运算符介绍
- (2)is与==区别
- 二、问题:Python整数缓存机制深度解析?
- 1、例子1:小整数缓存验证(交互模式)
- 2、例子2:文件模式下的特殊缓存规则
- 3、答案:
- (1)int整数缓存
- 三、问题:Python的成员运算符?
- 1、例子1:购物清单检查
- 2、答案:
- (1)成员运算符介绍
- 四、动手试一试
- 任务1:同一运算符验证
- 任务2:智能门禁权限验证
一、问题:Python 同一运算符的本质与实战?
1、例子1:双胞胎身份证验证
# 创建两个长相相同的双胞胎(值相同)
twin1 = "张三"
twin2 = "张三" # 检查是否是同一个人(内存地址)
print(twin1 is twin2) # 输出:True → Python字符串驻留机制优化内存使用 # 创建两个不同的字符串对象
twin3 = "张" + "三"
twin4 = "张三"
print(twin3 is twin4) # 输出:True(解释同上) # 强制创建不同对象(长字符串)
profile1 = "张三_身份证号:110101199901011234"
profile2 = "张三_身份证号:110101199901011234"
print(profile1 is profile2) # 输出:False → 长字符串内存地址不同
print(profile1 == profile2) # 输出:True → 内容相同
2、答案:
(1)is 同一运算符介绍
is
同一运算符用于比较两个对象的储存单元,实际比较的是对象的地址。
运算符 | 描述 |
---|---|
is | is是判断两个标识符是不是引用同一个对象 |
is not | is not 是判断两个标识符是不是引用不同对象 |
(2)is与==区别
is
用于判断两个变量引用对象是否为同一个,既比较对象的地址。==
用于判断引用变量引用对象的值是否相等,默认调用对象的_eq_()
方法。is
运算符比==
效率高,在变量和None
进行比较时,应该使用is
二、问题:Python整数缓存机制深度解析?
1、例子1:小整数缓存验证(交互模式)
# 在Python交互模式(REPL)中测试
a = 100
b = 100
print(a is b) # 输出:True → 小整数被缓存复用 c = 257
d = 257
print(c is d) # 输出:False → 超出缓存范围(-5~256)
2、例子2:文件模式下的特殊缓存规则
# 文件名:test_cache.py
a = 257
b = 257
print(a is b) # 输出:True → 文件模式下相同字面量会被优化为同一对象 c = 1000
d = 1000
print(c is d) # 输出:True(文件模式下)
3、答案:
(1)int整数缓存
- 交互模式下,Python为优化性能,对小整数进行预缓存处理,范围[-5,256],底层通过C语言数组实现,连续分配空间,便于查找,而非是所有整数对象。
- 文件模式下,所有数字都会缓存,范围是[-无穷大,+无穷大]。[-5,256]仍然底层用数组实现;不在[-5,256]出现的数,缓存到链表中,不连续分配空间。
关键规则速查表
模式 | 缓存范围 | 典型现象 |
---|---|---|
交互模式 | -5 ~ 256 | 257以上整数每次新建对象 |
文件模式 | 不限 | 相同字面量自动复用缓存对象 |
三、问题:Python的成员运算符?
1、例子1:购物清单检查
# 定义购物清单
shopping_list = ["牛奶", "面包", "鸡蛋", "苹果"] # 检查是否要买香蕉
need_banana = "香蕉" in shopping_list
print(f"需要购买香蕉吗?{need_banana}") # 输出:False # 检查是否已买鸡蛋
egg_check = "鸡蛋" not in shopping_list
print(f"鸡蛋还没买吗?{egg_check}") # 输出:False(已购买)
2、答案:
(1)成员运算符介绍
in
、not in
:成员运算符测试实例中包含了一系列的成员,包括字符串、列表或元组。
运算符 | 描述 |
---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False |
not in | 不在,则返回True |
四、动手试一试
任务1:同一运算符验证
# 根据整数缓存规则判断输出结果
a = -5
b = -5
print(a is b) # 输出:_____ c = 257
d = 257
print(c is d) # 输出:_____ # 提示:在Python文件中运行
参考答案:
print(a is b) # True(小整数缓存范围[-5,256])
print(c is d) # True(文件模式下相同字面量复用对象)
解析:
- 文件模式下所有相同字面量整数会复用同一对象
- 交互模式中超出-5~256范围的整数会创建新对象
任务2:智能门禁权限验证
allowed_users = ["张三", "李四", "王五"]
current_user = "李四" # 补全成员运算符判断用户权限
access = ______
print(f"访问权限:{access}") # 目标输出:True
参考答案:
access = current_user in allowed_users
关键点:
in
运算符直接检查元素是否存在于集合中- 适用于字符串、列表、元组等可迭代对象
📢 互动区
👉 遇到问题?在评论区:
- 描述问题(带代码截图更好)
- 分享学习心得
- 给文章提建议
⭐ 支持作者:点赞 | 收藏 | 关注
你的三连是我更新的最大动力!