Python 3 中的字符串(str)是Unicode 字符序列,用于表示文本数据。与 Python 2 不同,Python 3 不再区分 str 和 unicode,所有文本字符串都是 Unicode 原生支持的,这使得处理多语言和特殊符号变得非常自然。下面是关于 Python 3 字符串的全面概览,涵盖创建、操作、格式化、编码等核心内容。
1. 字符串的创建
字符串可以使用单引号、双引号或三引号(多行)定义:
s1 = 'Hello'
s2 = "World"
s3 = '''多行
字符串'''
s4 = """也可用双引号"""
三引号会保留内部的换行和缩进。
2. 转义字符与原始字符串
反斜杠 \ 用于转义特殊字符(如 \n 换行,\t 制表符)。若希望字符串原样输出(例如文件路径、正则表达式),可使用原始字符串,前缀为 r:
path = r'C:\Users\name' # 反斜杠不被转义
3. 字符串是不可变的
字符串一旦创建,不能修改其中的单个字符。任何看似“修改”的操作(如拼接、替换)都会生成新的字符串对象,这在性能和内存方面需要注意。
4. 基本操作
- 索引:
s[0]获取第一个字符,s[-1]获取最后一个。 - 切片:
s[start:end:step]返回子串(包含 start,不包含 end)。 - 拼接:
+或' '.join(list)(推荐用join拼接多个片段,效率更高)。 - 重复:
s * 3。 - 成员检查:
'a' in s或'abc' not in s。 - 长度:
len(s)。
5. 常用方法
Python 字符串提供了丰富的方法,所有方法都返回新字符串(因为不可变):
- 大小写转换:
.upper(),.lower(),.capitalize(),.title(),.swapcase() - 去除空白:
.strip()(两侧)、.lstrip()、.rstrip() - 查找与替换:
.find(sub),.index(sub),.replace(old, new),.count(sub) - 条件判断:
.isalpha(),.isdigit(),.isalnum(),.isspace(),.startswith(prefix),.endswith(suffix) - 分割与合并:
.split(sep)→ 列表,.join(iterable)→ 字符串(高效拼接) - 对齐与填充:
.center(width),.ljust(),.rjust(),.zfill(width)
示例:
text = " Hello, World! "
print(text.strip()) # "Hello, World!"
print(text.split(',')) # [' Hello', ' World! ']
print('-'.join(['a','b'])) # 'a-b'
6. 字符串格式化
Python 3 支持多种格式化方式:
-
% 格式化(旧式):
"Hello, %s!" % "Alice" # "Hello, Alice!" "Age: %d" % 25 # "Age: 25" -
.format()方法(推荐在 3.6 之前):"Hello, {}!".format("Bob") # 位置参数 "Name: {name}, Age: {age}".format(name="Eve", age=30) # 关键字参数 -
f-string(格式化字符串字面量)(Python 3.6+,最推荐):
在字符串前加f,直接使用花括号嵌入变量或表达式:name = "Charlie" age = 28 print(f"Name: {name}, Age: {age}, Next year: {age+1}")
7. 编码与解码(bytes 与 str 的转换)
- 字符串在内存中以 Unicode 码点存储,但传输或存储时需要编码为字节序列(如 UTF-8, GBK)。
- 编码:
str.encode(encoding='utf-8')→ 返回bytes对象。 - 解码:
bytes.decode(encoding='utf-8')→ 返回str。
s = "中文"
b = s.encode('utf-8') # b'\xe4\xb8\xad\xe6\x96\x87'
s2 = b.decode('utf-8') # "中文"
Python 3 默认使用 UTF-8 编码,但最好明确指定。
8. Python 2 vs Python 3 的关键区别
- Python 2 有
str(字节串)和unicode(文本串),Python 3 统一为str(Unicode)。 - Python 2 中
'中'是字节串,需加u前缀表示 Unicode;Python 3 中普通字符串就是 Unicode。 - Python 3 的
open()默认以文本模式读写,自动进行编码转换(可通过encoding参数控制)。
9. 高级注意事项
- Unicode 规范化:有些字符(如
é)可由单个码点或组合字符表示,使用unicodedata.normalize()可统一形式,便于比较。 - 字符长度:
len(s)返回 Unicode 码点个数,不是字节数。若需要字节长度,需先编码。 - 内存与性能:由于不可变性,大量字符串拼接会产生临时对象,建议使用
join或io.StringIO。 - 转义 Unicode:可以用
\uXXXX或\UXXXXXXXX表示任意 Unicode 字符。
10. 总结
Python 3 的字符串是强大且易用的 Unicode 文本容器,结合丰富的内置方法和现代格式化工具(f-string),让文本处理变得高效、清晰。理解其不可变性和编码机制是避免常见陷阱的关键。
