国际访客建议访问 Primers 编程伙伴 国际版站点 > Python 教程 > 字符串 以获得更好的体验。

# Python 的字符串

字符串相当于字符的列表,是一种十分常用且功能复杂的类型。

基础语法 - 变量与基本类型 一节中, 我们已经初步接触过字符串了。

# 编码与 bytes

计算机通过电子元件进行二进制存储,因此字符需要与二进制进行对应,这种对应方式称作编码。 例如英文字母 AASCII 编码 中对应的二进制值为 01000001 即十进制的 65

计算机的最小存储单元称为 字节(byte),一个字节拥有 8 个二进制位。 在 Python 中,存在一种名为 bytes 的类型,存储连续的多个字节。

bytes 类型的字面量类似字符串,通过 b'xxxx'b"xxxx" 表示,例如 b'hello world'

将字符串转换为 bytes 的操作称为 编码(encode),反之将 bytes 转换为字符串的操作称作解码:

运行示例

data:bytes = b'hello world'
print(data)

text:str = data.decode()    # 解码
print(text)
print(text.encode())        # 编码

bytes 看起来好像和字符串一样,只是开头多了个 b,实则不然:

  • bytes 的元素是字节,字符串的元素是字符(一个字符可能不止一个字节)

  • bytes 可以存储非文本的数据,例如图片等

运行示例

text:str = '你好世界'
print(text)

data:bytes = text.encode()  # 编码
print(data)

print(len(text), len(data))  # 可以看到长度不通
print(text[1], data[1])      # text[1] 是一个完整的汉字“好”,而 data[1] 是“你”字中的一个字节

bytes 是不可变类型,与之对应的可变类型为 bytearray

# 旧式字符串格式化

在编程开发中常常需要根据一些变量来创建字符串,可以使用 % 运算符进行格式化,语法如下:

"格式化字符串" % (值1, 值2, ...)    # (值1, 值2, ...) 是一个元组

只有一个值时也可以写作:

"格式化字符串" %                  # 一个单独的值

例如:

运行示例

print("猪肉的价格是 %d 元/斤" % 15)
print("%d 斤猪肉的价格是 %d 元" % (3, 3*15))

这里格式化字符串里的 %d十进制整数 占位符,对应的值会以十进制整数的格式替换到它的位置,其它常见的占位符还有:

  • %%: 百分号本身

  • %d: 十进制整数

  • %o: 十进制整数

  • %x: 十六进制整数(小写)

  • %X: 十六进制整数(大写)

  • %f: 浮点数

  • %s: 字符串

这种方式已不常用,更多信息请参考:printf 风格的字符串格式化

# format 方法

format 方法比 % 更加灵活,它使用花括号 {} 作为占位符,例如:

运行示例

print("Name: {}, Age: {}".format("Jerry", 18))                      # 按参数顺序替换
print("Name: {1}, Age: {0}".format(19, "Tom", ))                    # 按指定顺序替换
print("Name: {name}, Age: {age}".format(name="Tuffy", age=8))       # 按名称替换

占位符中可以使用索引:

运行示例

score_list:dict[str,int] = {
    'Tom': 88,
    'Jerry': 99,
    'Spike': 66
}

print("成绩如下 Tom:{0[Tom]} Jerry:{0[Jerry]} Spike:{0[Spike]}".format(score_list))

format 通过冒以号(:)开始的 格式规格 编辑格式,例如:

运行示例

# 打印九九乘法表
for x in range(1, 10):
    for y in range(1, 10):
        print(' {:2} '.format(x * y), end='')       # 最小宽度为 2 个字符
    print('')

格式规格内可以嵌套变量:

运行示例

# 宽度可以是变量
print("'{:{width}}'".format('txt', width=7))        # 最小宽度为 width 个字符

其它常用的格式规格:

运行示例

# 对齐
print("'{:<5}'".format('txt'))                      # 最小宽度为5,左对齐
print("'{:>5}'".format('txt'))                      # 最小宽度为5,右对齐
print("'{:^5}'".format('txt'))                      # 最小宽度为5,居中

# 保留 n 位小数
print("圆周率的近似值是 {:.2f}".format(3.1415926))  # 保留两位小数

更多具体的格式规格请参考 format 函数

# 格式字符串字面量 f-strings

使用 f-string 需要 Python 版本 \(\geq\) 3.6,参考 参考 PEP 498

格式字符串的字面量使用 f'xxxx'f"xxxx" 的形式表示,并使花括号({})进行格式化,花括号内可以执行代码,例如:

运行示例

score_list:dict[str,int] = {
    'Tom': 88,
    'Jerry': 99,
    'Spike': 66
}

print(f"成绩如下 Tom:{score_list['Tom']} Jerry:{score_list['Jerry']} Spike:{score_list['Spike']}")

格式字符串和 format 一样通过冒以号(:)开始的 格式规格 编辑格式,更多具体的格式规格请参考 format 函数

# 原始字符串 raw strings

原始字符串的字面量使用 r'xxxx'r"xxxx" 的形式表示,在原始字符串中没有转义字符,即 \n 表示字符串 \n 本身而非换行。

运行示例

print(r'hello \n world')

常用于正则表达式等其它具备转义字符的场合,避免需要写多重转义。

正则表达式将在后面进行学习

# 多行字符串

多行字符串使用三对引号('"均可)表示,例如:

运行示例

print('''
## 多行字符串

多行字符串使用三对引号(`'`和`"`均可)表示,例如:  
''')

多行字符串也常被当作多行注释使用,例如:

'''
没有赋值给变量,也不参与运算
因此相当于注释
'''

print("hello world")

多行字符串也可以添加 bfr 前缀来表示 bytes、格式字符串和原始字符串。

本文 更新于: 2025-06-19 01:15:26 创建于: 2025-06-19 01:15:26