Python 3.8从零开始学
上QQ阅读APP看书,第一时间看更新

4.1 字符串的简单操作

字符串是Python中最常用的类型之一。在Python中,可以使用单引号(')或双引号(")创建字符串。只使用一对单引号或一对双引号创建的字符串一般称为空字符串。一般要赋给字符串一个值,这样才是比较完整地创建了字符串。例如:

>>> ''               #创建单引号引起的空字符串
''
>>> ""              #创建双引号引起的空字符串
''
>>> 'hello'           #创建单引号引起的非空字符串
'hello'
>>> "python"       #创建双引号引起的非空字符串
'python'
>>> empy=''               #创建空字符串,将字符串赋给变量empy
>>> say='hello,world'      #创建非空字符串,并将字符串赋给变量say

由输出结果可以看到,字符串的创建非常灵活,可以使用各种方式进行创建。

在Python中,标准序列的所有操作(如索引、分片、成员资格、求长度、取最小值和最大值等)对字符串都适用,在第3章中,这些操作的使用示例就是直接用字符串做演示的。不过字符串是不可变的,所以字符串做不了分片赋值。在交互模式下输入:

>>> say='just do it'
>>> say
'just do it'
>>> say[-2:]
' it'
>>> say[-2:]='now'
Traceback(most recent call last):
File "<pyshell#12>", line 1, in <module>
say[-2:]='now'
TypeError: 'str' object does not support item assignment

由输出结果可以看到,字符串不能通过分片赋值更改,若更改会报错,错误提示我们str对象不支持局部更改。这是因为字符串是一个整体,通过分片赋值方式赋值会破坏这个整体,因而引发异常,同时也验证了字符串是不可变的。

在前面所讲解的示例中,对字符串的输出,都是在一个输出语句中只输出一行,若想要在一个输出语句中将输出的字符串内容自动换行,该怎么实现?先看如下示例:

>>> print('读万卷书,\n行万里路。')
读万卷书,
行万里路。

由输出结果可以看到,输入的一行内容,最终打印的结果变为两行了。当然,也可以发现输入的字符串中使用了一个之前的操作中没有使用过的\n。\n这两个字符在这里有什么特殊含义呢?

在Python的语法中,字符\n表示的是换行,是Python中指定的转义字符。在任何字符串中,遇到\n就代表换行的意思。Python中有很多转义字符,表4-1列出了一些常用的转义字符。

表4-1 Python中的转义字符

例如,对于前面的示例,虽然输入的字符串是用引号引起的,但输出的结果却不带引号了。假如要输出的结果也是被引号引起的,如需要输入的结果形式如下,需要怎样操作?

'读万卷书'
'行万里路'

操作示例如下:

>>> print(''读万卷书'\n'行万里路'')     #不使用转义字符,全用单引号
SyntaxError: invalid syntax
>>> print(""读万卷书"\n"行万里路"")     #不使用转义字符,全用单引号
SyntaxError: invalid syntax
>>> print("'读万卷书'\n'行万里路'")    #不使用转义字符,字符串用双引号引起,里面都用单引号
'读万卷书'
'行万里路'
>>> print('"读万卷书"\n"行万里路"')    #不使用转义字符,字符串用单引号引起,里面都用双引号
"读万卷书"
"行万里路"
>>> print('\'读万卷书\'\n\'行万里路\'')      #使用\’转义字符
'读万卷书'
'行万里路'

由输出结果可以看到,都使用单引号或都使用双引号,执行都会报错;在单引号中使用双引号或双引号中使用单引号都可以得到我们预期的结果,但不便于阅读和代码的理解,也容易出错;使用\'转义字符也可以得到我们预期的结果,但看起来相对直观,相对于前面的方式,使用转义字符更好一些。

在Python中进行字符串的操作时,如果涉及需要做转义的操作,建议使用转义字符。

对于表4-1中的这些转义字符无须刻意去记忆,了解即可,对于一些比较常用的转义字符,在实际使用中用多了就自然而然熟悉了,而对于不常用的,遇到的时候查找相关资料即可。