当前位置: 首页 > ai >正文

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 同一运算符用于比较两个对象的储存单元,实际比较的是对象的地址。

运算符描述
isis是判断两个标识符是不是引用同一个对象
is notis not 是判断两个标识符是不是引用不同对象

(2)is与==区别

在这里插入图片描述

  1. is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。
  2. == 用于判断引用变量引用对象的值是否相等,默认调用对象的 _eq_() 方法。
  3. 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整数缓存

  1. 交互模式下,Python为优化性能,对小整数进行预缓存处理,范围[-5,256],底层通过C语言数组实现,连续分配空间,便于查找,而非是所有整数对象。
  2. 文件模式下,所有数字都会缓存,范围是[-无穷大,+无穷大]。[-5,256]仍然底层用数组实现;不在[-5,256]出现的数,缓存到链表中,不连续分配空间。

关键规则速查表

模式缓存范围典型现象
交互模式-5 ~ 256257以上整数每次新建对象
文件模式不限相同字面量自动复用缓存对象

三、问题: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)成员运算符介绍

innot 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(文件模式下相同字面量复用对象)  

解析

  1. 文件模式下所有相同字面量整数会复用同一对象
  2. 交互模式中超出-5~256范围的整数会创建新对象

任务2:智能门禁权限验证

allowed_users = ["张三", "李四", "王五"]  
current_user = "李四"  # 补全成员运算符判断用户权限  
access = ______  
print(f"访问权限:{access}")  # 目标输出:True  

参考答案:

access = current_user in allowed_users  

关键点

  1. in 运算符直接检查元素是否存在于集合中
  2. 适用于字符串、列表、元组等可迭代对象

📢 互动区
👉 遇到问题?在评论区:

  1. 描述问题(带代码截图更好)
  2. 分享学习心得
  3. 给文章提建议

支持作者:点赞 | 收藏 | 关注
你的三连是我更新的最大动力!


http://www.xdnf.cn/news/8395.html

相关文章:

  • 【C++】笔试强训 第二天
  • Github 2025-05-23 Java开源项目日报 Top10
  • mysql语句执行流程
  • LeetCode Hot100(字串)
  • 电子电路:深入理解电磁耦合的定义与应用
  • 5.2.2 使用注解方式整合MyBatis
  • 树莓派内核源码的下载,配置,编译和替换
  • 【mysql】mysql的高级函数、高级用法
  • AI编辑器规则
  • LeRobot 框架的开发指南 (上)
  • 【【嵌入式开发 Linux 常用命令系列 19 -- linux top 命令的交互使用介绍】
  • Vue常用自定义指令-积累的魅力【VUE】
  • DETR3D- 3D Object Detection from Multi-view Images via 3D-to-2D Queries
  • 展锐 Android 15 锁定某个App版本的实现
  • OpenGL ES 基本基本使用、绘制基本2D图形
  • DDS compiler(6.0) IP核配置与使用教程
  • 基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(五)
  • 【数据架构05】数据要素架构篇
  • 二、OpenCV图像处理-几何变换
  • 服务接口鉴权与内部认证:自定义注解与AOP实现的企业级实践
  • Android 14 Binderized HAL开发实战指南(AIDL版)
  • StringBuilder 和 StringBuffer 的线程安全分析
  • maven添加自己下载的jar包到本地仓库
  • Python字典的工作原理:深入理解哈希表实现
  • Redis主从+哨兵+集群分片
  • 回溯算法:解锁多种问题的解决之门
  • 利用Qt绘图随机生成带多种干扰信息的数字图片
  • Lavavel学习笔记(Eloquent ORM/Swoole 定时任务)
  • Logback 在 Spring Boot 中的详细配置
  • 【深尚想!爱普特APT32F1023H8S6单片机重构智能电机控制新标杆】