• 预备
  • 基础语法
  • 容器类型
  • 函数
  • 面向对象
  • 输入输出
  • 进程控制
  • 线程控制
  • 正则表达式
  • 网络编程
  • 图形界面
  • 常见问题
  • API 帮助手册

  • 设置

3928

20 分钟

#字符串

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

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

#编码与 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()) # 编码
Loading...

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] 是“你”字中的一个字节
Loading...

#旧式字符串格式化

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

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

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

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

例如:

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

这里格式化字符串里的 %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)) # 按名称替换
Loading...

format 可以指定宽度,例如:

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

宽度可以是变量:

# 宽度可以式变量 print("'{:{width}}'".format('txt', width=7))
Loading...

可以指定对齐方式:

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

可以使用索引:

score_list:dict[str,int] = { 'Tom': 88, 'Jerry': 99, 'Spike': 66 } print("成绩如下 Tom:{0[Tom]} Jerry:{0[Jerry]} Spike:{0[Spike]}".format(score_list))
Loading...

通过 format 函数保留 n 位小数:

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

参考 格式字符串语法

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

格式字符串的字面量使用 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']}")
Loading...

#原始字符串 raw strings

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

print(r'hello \n world')
Loading...

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

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

#多行字符串

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

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

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

''' 没有赋值给变量,也不参与运算 因此相当于注释 ''' print("hello world")

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

创建于 2025/5/2 00:08:06

更新于 2025/5/2 00:08:06