
2.2 字符串
在Python中,可以使用单引号‘’或者双引号“”来创建字符串。在创建字符串时,只要为变量分配一个值即可。例如:

同时,单引号‘’和双引号“”也可以结合使用,即可以在字符串中包含引号和撇号。例如:

那么,了解字符串的定义之后,该如何对字符串进行操作呢?此时就需要先知道字符串的下标和切片。
所谓的下标,可以理解为编号,就好比超市存储柜的编号、学生名单表中的学号,通过这个编号或者学号就能找到相应的存储空间或者学生信息。需要注意的是,在Python中,下标是从0开始的,不是从1开始的。
字符串实际上就是字符的数组,所以支持下标索引。如:msg="吃饭了吗?",msg[0]="吃",msg[1]="饭",以此类推。相似地,name='hello',则name[0]='h',name[1]='e',以此类推。
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。切片语法:[起始:结束:步长]。选取的区间属于左闭右开型,即从“起始”位开始,到“结束”位的前一位结束(不包含结束位本身)。对应到数学中,就是前闭后开型区间,也可以理解为start <=i <end。
例如:name='hello',则切片的常见操作如表2-2所示。
表2-2 切片的常见操作示例

在实际操作过程中,如果不知道某些函数的具体用法,则可以使用help命令来进行提示和理解。比如,想知道字符串str的简介,那么可以在Jupyter Notebook中,输入help(str)命令,就可以看到与字符串有关的介绍;输入dir(str)命令,则会显示出字符串所有的私有方法和公有方法(在Python中,以两个下画线开头的方法就默认为私有方法)。对于字符串中的某一特定方法,比如find的用法,可以输入help(str.find)命令,就可以看到find方法的具体介绍和用法,包括函数的传入参数以及函数返回值,如图2-2、图2-3和图2-4所示。

图2-2 help(str)的用法

图2-3 dir(str)的用法
下面介绍字符串的常用操作。
字符处理类函数及用法如表2-3所示。

图2-4 help(str.find)的用法
表2-3 字符处理类函数及用法

字符串搜索相关类函数及用法如表2-4所示。
表2-4 字符串搜索相关类函数及用法

字符串判断类函数及用法如表2-5所示。
表2-5 字符串判断类函数及用法

续表

续表

字符串格式化类函数及用法如表2-6所示。
表2-6 字符串格式化类函数及用法

字符串其他类函数及用法如表2-7所示。
表2-7 字符串其他类函数及用法

续表

看完上述字符串常用操作后,可以试着理解一下这些函数的可能实现方法。比如:判断一个字符串是否是以字母“a”开头,或者是否以字母“c”结束。首先可能会想到使用startswith(或者endswith)函数,但对于一名初学者来说,如果只接触过基本的下标或者切片,能不能实现该函数的功能呢?
以“a”开头,取下标为0的字符,与字母“a”进行比较,如果相等,则返回True,否则返回False。同理,取出字符串的最后一个字符,与字母“c”进行比较,如果相等则返回True,如果不相等则返回False。
但是在实际开发过程中,可能要考虑更多的情况。假设传进来的参数不是一个字符串,该怎样处理?如果是字符串,会不会是空字符串呢?字符串的长度是否大于要比较的字符串的长度等情况,都需要考虑到。
下面简单写一个判断字符串是不是以某一特定字符串开头的函数(默认传进来的参数都是字符串类型)。如果是,则返回True;否则返回False。其代码运行结果如图2-5所示。


图2-5 startswith_prefix函数运行结果
希望读者在学习字符串的常用操作时,多思考哪些基本的操作能够组合起来,从而实现一个内置函数的用法。也希望读者在面对一个项目问题时,能够快速地想到一些内置函数,以提高自己的代码质量,从而减轻自己的测试负担。