
5.5 字符串
字符串(str)为有序的字符集合,即字符序列。str对象是不可变对象。
5.5.1 字符串的序列操作
字符串支持序列的基本操作,包括索引访问、切片操作、连接操作、重复操作、成员关系操作、比较运算操作,以及求字符串的长度、最大值、最小值等。
通过len(s)可以获取字符串s的长度,如果其长度为0,则为空字符串。
【例5.16】 字符串的序列操作示例。

5.5.2 字符串编码
在默认情况下,Python字符串采用utf-8编码。在创建字符串时,用户也可以指定其编码方式:

其中,object为字节码对象(bytes或bytearray);encoding为编码;errors为错误控制。该构造函数的结果等同于bytes对象b的对象方法:

与之相对应,用户也可以把字符串对象s编码为字节码对象:

【例5.17】 字符串编码和解码示例。

5.5.3 字符串的格式化
1. %运算符形式
Python支持类似于C语言的printf格式化输出,采用如下形式。

格式字符串与C语言中的printf格式字符串基本相同。格式字符串由固定文本和格式说明符混合组成。格式说明符的语法如下。

其中:key(可选)为映射键(适用于映射的格式化,例如'%(lang)s');flags(可选)为修改输出格式的字符集;width(可选)为最小宽度,如果为*,则使用下一个参数值;precision(可选)为精度,如果为*,则使用下一个参数值;Length为修饰符(h、l或L,可选),Python忽略该字符;type为格式化类型字符。例如:

格式字符串的标识符(flags)如下。
- '0':数值类型格式化结果左边用0填充。
- '-':结果左对齐。
- '':对于正值,结果中将包括一个前导空格。
- '+':数值结果总是包括一个符号('+'或'-')。
- '#':使用另一种转换方式。
格式化类型字符(type)如下。
- %d或%i:有符号整数(十进制)。
- %o:有符号整数(八进制)。
- %u:同%d,已过时。
- %x:有符号整数(十六进制,小写字符),当标识符为'#'时输出前缀'0x'。
- %X:有符号整数(十六进制,大写字符),当标识符为'#'时输出前缀'0X'。
- %e:浮点数字(科学记数法,小写e),当标识符为'#'时总是带小数点。
- %E:浮点数字(科学记数法,大写E),当标识符为'#'时总是带小数点。
- %f或%F:浮点数字(用小数点符号),当标识符为'#'时总是带小数点。
- %g:浮点数字(根据值的大小采用%e或%f),当标识符为'#'时总是带小数点,保留后面的0。
- %G:浮点数字(根据值的大小采用%E或%F),当标识符为'#'时总是带小数点,保留后面的0。
- %c:字符及其ASCII码。
- %r:字符串,使用转换函数repr(),当标识符为'#'且指定precision时截取precision个字符。
- %s:字符串,使用转换函数str(),当标识符为'#'且指定precision时截取precision个字符。
- %a:字符串,使用转换函数ascii(),当标识符为'#'且指定precision时截取precision个字符。
2. format内置函数
format内置函数的基本形式如下。

格式说明符(format_spec)的基本格式如下。

其中,fill(可选)为填充字符,可以为除{}以外的任何字符;align为对齐方式,包括"<"(左对齐)、">"(右对齐)、"="(填充位于符号和数字之间,例如'+000000120')、"^"(居中对齐);sign(可选)为符号字符,包括"+"(正数)、"-"(负数)、""(正数带空格,负数带-);'#'(可选)为使用另一种转换方式;'0'(可选)为数值类型格式化结果左边用0填充;width(可选)是最小宽度;precision(可选)是精度;type是格式化类型字符。
格式化类型字符(type)如下。
- b:二进制数。
- c:字符,整数转换为对应的unicode。
- d:十进制数。
- o:八进制数。
- x:十六进制数,小写字符,当标识符为'#'时输出前缀'0x'。
- X:十六进制数,大写字符,当标识符为'#'时输出前缀'0X'。
- e:浮点数字(科学记数法,小写e),当标识符为'#'时总是带小数点。
- E:浮点数字(科学记数法,大写E),当标识符为'#'时总是带小数点。
- f或F:浮点数字(用小数点符号),当标识符为'#'时总是带小数点。
- g:浮点数字(根据值的大小采用e或f),当标识符为'#'时总是带小数点,保留后面的0。
- G:浮点数字(根据值的大小采用E或F),当标识符为'#'时总是带小数点,保留后面的0。
- n:数值,使用本地千位分隔符。
- s:字符串,使用转换函数str(),当标识符为'#'且指定precision时截取precision个字符。
- %:百分比。
- _:十进制千分位分隔符或者二进制4位分隔符(Python 3.6的新增功能)。
例如:

3. 字符串的format方法
字符串的format方法的基本形式如下。

格式字符串由固定文本和格式说明符混合组成。格式说明符的语法如下。

其中,可选的索引对应于要格式化参数值的位置,可选的键对应于要格式化的映射的键;格式化说明符(format_spec)同format内置函数。例如:
