今天我们来聊聊Python中最「不起眼」却最常用的数据类型——字符串!你以为"hello world"就是全部?其实字符串藏着很多让人直呼「原来如此」的细节!
1. 字符串的「铁律」:一旦创建,终身不变!所有对字符串的修改操作(比如拼接、替换),都会生成新对象!
python
s = "Hello"print(id(s)) # 输出内存地址:140000000s += " World" # 新对象诞生!print(id(s)) # 新地址:150000000(和之前不同) 为什么要这样设计?
为了保证哈希安全(字典键的基石!)和多线程下的数据安全~
2. 三种创建方式,90%的人只用过两种!基础款:单引号' '、双引号" "(功能完全相同)多行神器:三引号''' '''或""" """,写SQL、HTML时超方便!sql_query = """SELECT * FROM users WHERE name = '小明'"""冷知识:空字符串""比list()还快!初始化变量时用它准没错~3. 字符串的「分身术」:切片与索引和列表一样,字符串支持正反向索引,但记住——不能修改!
s = "Python最强"print(s[2]) # 输出:t(正向从0开始)print(s[-3]) # 输出:最(反向从-1开始)print(s[3:6]) # 输出:hon(切片到索引6的前一位!)4. 最常用的6个字符串方法场景
方法示例
输出结果
按分隔符拆分
"A,B,C".split(",")
['A', 'B', 'C']
合并列表为字符串
"-".join(['A','B','C'])
"A-B-C"
查找子串位置
"hello".find("e")
1(找不到返回-1)
替换内容
"abc".replace("a","X")
"Xbc"
大小写转换
"Hello".lower()
"hello"
去除首尾空格
" text ".strip()
"text"
5. 格式化字符串:选f-string就对了!三种写法对比:
# 1. f-string(最推荐!)name = "小明"print(f"{name}今年{20}岁") # 小明今年20岁# 2. str.format()(兼容旧版本)"{}今年{}岁".format(name, 20)# 3. %格式化(逐渐淘汰)"%s今年%d岁" % (name, 20) 为什么f-string更快?
它在执行时直接计算并嵌入值,省去了解析格式的时间!
6. 编码问题:让无数人崩溃的坑!黄金原则:程序内部用str(Unicode),存储/传输用bytes# 字符串 → 字节s = "中文"b = s.encode("utf-8") # b'\xe4\xb8\xad\xe6\x96\x87'# 字节 → 字符串b.decode("utf-8") # 中文 遇到乱码怎么办?
统一代码和文件的编码为UTF-8(99%的问题都能解决)!
7. 高效拼接:别再用 += 了!错误示范:频繁拼接生成大量临时对象,内存爆炸!
python
s = ""for i in range(10000): s += str(i) # 每次循环都创建新对象!正确做法:用列表暂存 + join一次性合并,性能提升100倍!
parts = []for i in range(10000): parts.append(str(i))s = "".join(parts)8. 冷知识:Python的「字符串驻留」Python会自动缓存短字符串(如"hello"),不同变量共享同一内存!
a = "hello"b = "hello"print(a is b) # True(内存地址相同)手动驻留大字符串:用sys.intern()节省内存
import syss = sys.intern("非常非常长的字符串......")总结字符串看似简单,却藏着性能优化、编码陷阱、内存管理的大学问! 下次遇到字符串问题,记得回来看看这篇「秘籍」哦~
你在项目中踩过哪些字符串的坑? 欢迎在评论区留言讨论!
关注我,学习更多Python黑科技!