专业编程基础技术教程

网站首页 > 基础教程 正文

Python字符串:你以为你会了?这8个细节让你代码更高效!

ccvgpt 2025-03-20 12:49:05 基础教程 4 ℃

今天我们来聊聊Python中最「不起眼」却最常用的数据类型——字符串
你以为"hello world"就是全部?其实字符串藏着很多让人直呼「原来如此」的细节!

1. 字符串的「铁律」:一旦创建,终身不变!

所有对字符串的修改操作(比如拼接、替换),都会生成新对象

Python字符串:你以为你会了?这8个细节让你代码更高效!

python

s = "Hello"
print(id(s))         # 输出内存地址:140000000
s += " 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 sys
s = sys.intern("非常非常长的字符串......")

总结

字符串看似简单,却藏着性能优化编码陷阱内存管理的大学问! 下次遇到字符串问题,记得回来看看这篇「秘籍」哦~

你在项目中踩过哪些字符串的坑? 欢迎在评论区留言讨论!


关注我,学习更多Python黑科技!

最近发表
标签列表