Python 3.6零基础入门与实战
上QQ阅读APP看书,第一时间看更新

2.4 字符串

字符串变量的定义特别简单,直接赋值即可,例如:

    str1 = 'Hello World!'

如果我们要操作字符串,比如拆分、连接、获取字符串的一部分,就需要学习字符串的运算符、内置操作函数等内容。本节将逐一介绍这些知识点。

2.4.1 字符串的单引号、双引号、三引号

字符串赋值时可以使用单引号、双引号、三引号形式。单引号和双引号并没有太大的区别,比如:

    str1 = 'Hello World!'
    str2 = "I'm fine,and you?"

注 意

如果字符串中包含单引号就要使用双引号进行定义。

如果是特别长的字符串换行时,单引号和双引号需要加“\”符号,例如:

    str1 = 'Hello \
    World!'
    str2 = "I'm fine,\
    and you?"

“\”符号又会涉及一些字符串的转义,为了更直观,特别长的字符串可以使用三引号,例如:

    str3=''' this
    is
    world '''

这3种方法并没有太大的区别,读者可根据实际生产环境使用。

2.4.2 字符串的截取

说得好没有练得好,还是先来演练一下:

【示例2-4】

以上执行结果如图2.4所示。

图2.4 字符串的截取

代码定义了两个字符串str1和str2,并分别对它们进行了不同形式的字符串截取操作。str1有4个操作:

• str1[1],表示截取第几个字符,这个编号从0开始,0表示第1个字符,1表示第2个字符。

• str1[2:5],表示截取从第1个参数开始到第2个参数前一位的字符。注意,这是从第几位到第几位,并不是从第2位截取长度为5的字符。

• str1[-2:1],从输出结果看这个并没有输出任何字符。-2表示从倒数第2位开始选择,这里要注意倒数开始的时候编号不是从0开始的。

• str1[5:5],没有输出任何结果。第1个参数的值必须小于第2个参数。

str2有5个操作:

• str2[0],表示截取第1个字符。

• str2[:5],第1个参数为空,表示从头开始截取。

• str2[6:],第2个参数为空,表示截取到字符串的最后。

• str2[-2:],表示从倒数第2个开始截取,一直到字符串的最后。

• str2[:-2],表示从头开始截取,一直到倒数第2位。

说 明

这种截取部分数据的功能有一个专门的概念,叫切片(Slice)。从倒数开始截取数据的功能也叫倒数切片。大部分语言的字符串操作都支持切片功能,Python中很多数据类型都支持切片。

2.4.3 字符串的拼接

字符串的拼接有3种方法:+符号、join函数和格式化拼接。

(1)使用+符号拼接比较简单,代码如下:

【示例2-5】

因为使用+符号拼接后的字符串需要划定新的内存空间来存储,所以普遍认为这种拼接方式效率低,尤其是越多的字符串拼接效率就越低。

(2)使用join函数拼接则稍显复杂,函数语法如下:

    str.join(sequence)

sequence是要拼接的字符串序列,str是拼接需要使用的字符,如空格、逗号等。因此,在使用该函数时要定义两个变量,举例如下:

【示例2-6】

(3)格式化拼接需要用到格式化符号,我们在这里先举例,具体格式化符号的使用,后面会详细介绍。%s表示需要字符串参数,中间的%表示这是一段格式化输出,后面的参数用括号封闭,用逗号间隔。

【示例2-7】

2.4.4 字符串的各种常用运算符

前面学习过数字运算符有+、-、*、/等,字符串也是有运算符的,不过不是加减乘除,而是一些针对字符串操作的符号,如前面介绍过的+、[]、[:]都是字符串的运算符。常用的字符串运算符参见表2.2。

表2.2 字符串常用运算符

这里要特别讲解一下r的使用,字符串有很多转义符号,如\n表示换行、\r表示回车,如果我们要在字符串中显示\n,而不是当作换行使用,此时就需要在字符串前添加r,比如:

    print (r"这里介绍\n的使用")
    print ("这里介绍\n的使用")

这两行的输出结果如图2.5所示,其中第2个输出中有换行操作。

图2.5 有转义和没有转义的对比

2.4.5 字符串的转义

字符串中的转义就是说字符本身并不是它原来的字面意思。字符串的转义符号都是以\开头的,常用的转义符号参见表2.3。

表2.3 转义符号

注 意

八进制是\0(零),不是字母o。

这里要特别说明一下\0和\x,它们后面跟的是代表某个字符的数据,而这个数据来自ASCII码表,如图2.6所示是部分表2.3的内容,圈出的位置就是表2.3中的换行符,比如\010代表退格键,\x0D代表回车键。

图2.6 ASCII码表

我们来看一个例子。

【示例2-8】

上述代码的执行结果如图2.7所示。

图2.7 各种转义符号的使用

2.4.6 字符串的格式化符号

在日常开发中,使用print函数经常会用到字符串的格式化符号,如果要输出一个字符串,就用%s;如果要输出一个整数,就用%d。常见的格式化符号参见表2.4。

表2.4 格式化符号

我们可以把格式化字符串想象成带有几个填空项的模板。比如:

    ____的数据成绩是____

第一个填空项是人名(字符串),第二个填空项是分数(整数),在代码中就是:

    %s的数据成绩是%d

输出后的内容与模板一模一样,只将填空的内容填上即可。下面在代码中输入填空项:

在模板和具体内容之间有一个%,表示这是一个格式化操作。具体填写的内容用括号封闭起来,多个参数之间用逗号间隔。如果只有一个参数,就可以省略括号。

我们还可以在格式化符号前添加几类符号:

• -,左对齐标志,默认为右对齐。

• +,表示应该包含数字的正负号。

• 0,表示用0填充。

下面再看一段代码:

【示例2-9】

输出结果如图2.8所示。在第1行的输出中,%5s表示字符串长度为5,但因为给出的参数只有3位,所以前面补充了两个空格进行输出(默认用空格填充);%03d表示长度为3的整数,长度不够时前面用0填充,输出的是098。默认情况下,数值的+号是不输出的,但如果使用+这个符号,则正负号都会输出。

图2.8 格式化输出

除了各种符号外,Python也提供了一个格式化函数format。它通过“{}”和“:”代替传统%操作。format函数的特色就是可以接受无限个参数,而且位置可以不按模板的顺序,这和我们前面所说的填空的例子略有不同。

【示例2-10】

这里用“{}”表示模板中每个填空的位置,如果不按固定的顺序,就可以按{0}指定顺序,如第3行代码的{2}使用了两次,也就是第3个参数被调用两次。

“{}”和“:”的组合通常用于数值的格式化,表2.5是一些通用的格式化写法。

表2.5 格式化写法

下面是一段代码:

【示例2-11】

输出结果如图2.9所示。

图2.9 格式化数字

2.4.7 字符串的内置函数

函数的使用想必读者已经不再陌生,前面也介绍过join拼接字符串、format格式化字符串等函数。常用的字符串内置函数还包括表2.6所示的这些。

表2.6 内置函数

(续表)

这里要特别说明的是translate函数,它需要一个table参数,这个table一般称为翻译表或转换表。比如根据最新广告法规定,不允许使用“最好的”“最厉害的”这类用语,还有网站也经常需要过滤一些不文明用语,这时候就可以制作一个翻译表,比如将“最”替换为“*”。翻译表使用maketrans函数制作,下面给一个详细的例子:

【示例2-12】

上述代码输出结果如图2.10所示。首先使用maketrans函数制作一个翻译表(“最”翻译为“*”),然后使用translate函数输出翻译后的字符串。

图2.10 翻译表