
4.6 str类型
字符串(str)是一个有序的字符集合。在Python中没有独立的字符数据类型,字符即长度为1的字符串。
Python的内置数据类型str用于字符串处理。str对象的值为字符系列。str对象(字符串)是不可变对象。
4.6.1 字符串字面量
使用单引号或双引号括起来的内容是字符串字面量,Python解释器自动创建str型对象实例。Python字符串字面量可以使用以下4种方式定义。
(1)单引号(' '):包含在单引号中的字符串,其中可以包含双引号。
(2)双引号(" "):包含在双引号中的字符串,其中可以包含单引号。
(3)三单引号(''' '''):包含在三单引号中的字符串,可以跨行。
(4)三双引号(""" """):包含在三双引号中的字符串,可以跨行。
【例4.13】 字符串字面量示例。

注意:两个紧邻的字符串,如果中间只有空格分隔,则自动拼接为一个字符串。例如:

4.6.2 字符串编码
Python 3中的字符默认为16位Unicode编码,ASCII码是Unicode编码的子集。例如,字符'A'的ASCII码为65,对应的八进制为101,对应的十六进制为41。
使用u''或U''的字符串称为Unicode字符串。在Python 3中默认为Unicode字符串。

使用内置函数ord()可以把字符转换为对应的Unicode码;使用内置函数chr()可以把十进制数转换为对应的字符。例如:

4.6.3 转义字符
特殊符号(不可打印字符)可以使用转义序列表示。转义序列以反斜杠开始,紧跟一个字母,例如“\n”(新行)和“\t”(制表符)。如果希望字符串中包含反斜杠,则它前面必须还有另一个反斜杠。
Python转义字符如表4-9所示。
表4-9 特殊符号的转义序列

【例4.14】 转义字符示例。

转义字符后跟Unicode编码也可以表示字符。例如:

使用r''或R''的字符串称为原始字符串,其中包含的任何字符都不进行转义。

4.6.4 str对象
str是Python的内置数据类型,创建str类型的对象实例的基本形式如下。

通过创建str对象可以把任意对象转换为str对象,返回object.__str__(),如果对象没有定义__str__(),则返回repr(object)。
【例4.15】 str对象示例。

4.6.5 str对象的属性和方法
使用str对象提供的方法可以实现常用的字符串处理功能。str对象是不可变对象,故调用方法返回的字符串是新创建的对象。str对象的方法有两种调用方式,即字符串对象的方法和str类方法。
【例4.16】 str对象方法示例。

4.6.6 字符串的运算
字符串对象支持关系运算、使用运算符“+”拼接两个字符串、内置函数、str对象方法等运算操作。
字符串实际上是字符序列,故支持序列数据类型的基本操作,包括索引访问、切片操作、连接操作、重复操作、成员关系操作,以及求字符串长度、最大值、最小值等。例如,通过len(s)可以获取字符串s的长度;如果其长度为0,则为空字符串。具体内容可以参见第5章。
在Python语言中,常用的str数据类型对象的运算表达式如表4-10所示。
表4-10 Python常用的字符串表达式

4.6.7 对象转换为字符串
使用内置函数str()可以把数值转换为字符串。实际上,在使用print(123)输出数值时将自动调用str(123)函数把123转换为字符串,然后输出。
Python还提供了另一个内置函数repr(),该函数返回一个对象的更精确的字符串表示形式。
在大多数情况下,内置函数repr()和str()的结果一致。
【例4.17】 对象转换为字符串示例。

4.6.8 字符串的格式化
通过字符串的格式化可以输出特定格式的字符串。Python中字符串的格式化有以下几种方式:

有关字符串格式化的详细信息请参见本书中的第5.5.3节。
例如:

【例4.18】 字符串示例(string.py):格式化输出字符串堆积的三角形。其中,str.center()方法用于字符串两边填充;str.rjust(width[,fillchar])方法用于字符串右填充,具体可以参见本书中的第15.2节。

程序运行结果如下。

4.6.9 格式化字符串变量
在Python 3.6中增加了对格式化字符串变量的支持,以f开始的字符串可以包含嵌入在花括号“{}”中的变量,称之为字符串变量替换(插值)。例如:
