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

23、Python字符串核心机制解析:驻留原理、对象比较与成员检测实战

适合人群:零基础自学者 | 编程小白快速入门
阅读时长:约5分钟

文章目录

  • 一、问题:Python的字符串驻留机制?
    • 1、例子1:字符串驻留现象
    • 2、答案:
      • (1)字符串驻留
  • 二、问题:Python字符串比较和同一性?
    • 1、例子1:用户登录验证系统
    • 2、例子2:关键特性说明
    • 3、答案:
      • (1)同一操作符判断字符串相同
  • 三、问题:Python的成员操作符判断子字符串?
    • 1、例子1:检查单词中是否包含特定字母
    • 2、答案:
      • (1)成员操作符判断子字符串
  • 四、动手试一试
    • 任务1:验证字符串驻留机制
    • 任务2:敏感词检测系统

一、问题:Python的字符串驻留机制?

1、例子1:字符串驻留现象

str1 = "Python" # 简单字符串会被驻留
str2 = "Python"  print(id(str1))  # 输出内存地址(例如:140245378789616)  
print(id(str2))  # 输出相同的内存地址(例如:140245378789616)  
print(str1 is str2)  # True(证明是同一个对象)  

2、答案:

(1)字符串驻留

  1. 字符串驻留机制是Python的内存优化技术。当多个变量被赋予相同内容的字符串时,Python不会重复创建新对象,而是让这些变量共享同一块内存地址
  2. 简单说:常量字符串只保留一份。

二、问题:Python字符串比较和同一性?

1、例子1:用户登录验证系统

# 用户输入的验证码(来自表单)  
user_input = "AbC123"  # 系统生成的验证码(存储在数据库)  
system_code = "AbC123"  # 值相等判断(内容是否相同)  
if user_input == system_code:  print("验证码正确 ✅")  # 输出:验证码正确 ✅  
else:  print("验证码错误 ❌")  # 同一性判断(是否同一个对象)  
if user_input is system_code:  print("指向内存中的同一对象")  
else:  print("不同内存对象")  # 输出:不同内存对象  

输出结果

验证码正确 ✅  
不同内存对象  

2、例子2:关键特性说明

name1 = "Python"  
name2 = "Python"  
name3 = "Py" + "thon"  # 拼接创建新字符串  # 值相等检查  
print(name1 == name2)  # True(内容相同)  
print(name1 == name3)  # True(内容相同)  # 同一性检查(受驻留机制影响)  
print(name1 is name2)  # True(小字符串共享内存)  
print(name1 is name3)  # False(新创建的对象)  

内存原理图示

name1 → [P][y][t][h][o][n] ← name2(共享内存)  
name3 → [P][y][t][h][o][n](新建独立内存)  

3、答案:

(1)同一操作符判断字符串相同

  1. 可以直接使用==!=对字符串进行比较,是否值相同。

  2. 使用isnot is,判断2个对象是否相同,比较的是对象的地址,即id(obj1)是否和id(obj2)相等。

  3. 核心概念对比

操作符号检查内容生活类比
值相等==内容是否完全相同比较两本书内容是否相同
同一性is是否同一内存对象比较两本书是否同一本书

三、问题:Python的成员操作符判断子字符串?

1、例子1:检查单词中是否包含特定字母

# 检查单词"apple"中是否包含特定字母
word = "apple"# 检查是否包含字母"a"
if "a" in word:print("✅ 包含字母'a'")  # 会输出这行# 检查是否包含字母"z"
if "z" not in word:print("✅ 不包含字母'z'")  # 会输出这行

输出结果

✅ 包含字母'a'
✅ 不包含字母'z'

2、答案:

(1)成员操作符判断子字符串

  1. innot in关键字,判断某个字符(子字符串)是否存在于字符串中。

  2. 核心规则说明

操作符代码示例检查内容
in"Python" in "我爱Python"子串是否存在于字符串中
not in"Java" not in "Python教程"子串是否不存在于字符串中

四、动手试一试

任务1:验证字符串驻留机制

# 创建两个相同内容的字符串  
str1 = "Python教程"  
str2 = "Python教程"  # 验证是否为同一对象  
is_same_object = ______  # 使用is操作符  print(f"是否为同一对象:{is_same_object}")  
print(f"str1内存地址:{id(str1)}")  
print(f"str2内存地址:{id(str2)}")  

参考答案:

is_same_object = str1 is str2  # True(简单字符串会被驻留)

解析

  1. Python会对简单字符串自动启用驻留机制
  2. is操作符验证对象同一性

任务2:敏感词检测系统

# 用户评论内容  
comment = "这个产品非常好用!"  # 检测是否包含敏感词"垃圾"  
has_sensitive_word = ______  # 使用in操作符  if not has_sensitive_word:   # 当不存在敏感词时print("✅ 评论通过审核")  
else:  print("❌ 检测到敏感词")  

参考答案:

has_sensitive_word = "垃圾" in comment  # False

关键点

  1. 使用in判断子字符串是否存在
  2. 返回布尔值用于条件判断

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

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

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


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

相关文章:

  • 亮数据抓取浏览器,亚马逊数据采集实战
  • 【电路物联网】SDN架构与工作原理介绍
  • 护照阅读器在景区的应用
  • Vue 数据代理机制实现
  • 什么是数据交换?有哪些数据交换方式?
  • Rust 学习笔记:关于 Future trait 和 Async 语法的练习题
  • el-select滚动分页加载、模糊搜索
  • 代码填空题技术实现:突破 highlight.js 安全限制的工程实践
  • Java Collection接口解析
  • c++算法学习6——迪杰斯特拉算法
  • 用 OpenSSL 库实现 3DES(三重DES)加密
  • CKA考试知识点分享(10)---NetworkPolicy
  • 【Git】TortiseGit设置过滤上传文件
  • 神经网络:深度剖析过拟合、欠拟合及其泛化能力提升策略
  • 【学习笔记】HTTP
  • P2834 纸币问题 3
  • 讲一件Java虚拟线程
  • 小白理财 - 入门第一课
  • 扁平风格职场商务通用PPT模版分享
  • AI支持下的-ArcGIS数据处理、空间分析、可视化及多案例综合应用
  • Java多线程实现之同步方法详解
  • Win10重装系统 (重生篇:我在华强修电脑)
  • 用python玩转大语言模型——从 RNN 到文本生成大语言模型的奇幻之旅
  • SpringBoot学习day2-前后端的交互搭建以及跨域问题、拦截过滤器问题的解决
  • 理解系统交互:UML时序图
  • 驭码CodeRider 2.0 产品体验:在VSCode安装并创建一个雷电小游戏
  • Django项目QQ授权登录报错:redirect uri is illegal(100010) 解决方法
  • 深度学习小项目合集之音频语音识别
  • docker-compose搭建eureka-server和zipkin
  • ubuntu 安装 JDK8