Python从菜鸟到高手(第2版)
上QQ阅读APP看书,第一时间看更新

2.3 字符串基础

字符串是Python语言中另一个重要的数据类型,在Python语言中,字符串可以使用双引号(")或单引号(')将值括起来。例如,下面都是合法的字符串值。

     s1 = "hello world"
     s2 = 'I love you.'

字符串也同样可以被print函数输出到控制台,这种用法在前面已经多次使用过了。

     print("hello world")

在前面的章节尽管已经多次使用了字符串,但只涉及了字符串的一些简单用法,如定义字符串变量、输出字符串等。本节将介绍字符串的更多用法。

2.3.1 单引号字符串和转义符

微课视频

代码位置:src\basic\quotation_marks.py

字符串可以直接使用,在Python控制台中直接输入字符串,如"Hello World",会按原样输出该字符串,只不过用单引号括了起来。

     >>> "Hello World"
     'Hello World'

那么用双引号和单引号括起来的字符串有什么区别?其实没有任何区别。只不过在输出单引号或双引号时方便而已。例如,在Python控制台输入'Let's go!',会抛出如下的错误。

这是因为Python解释器无法判断字符串中间的单引号是正常的字符,还是多余的单引号,所以会抛出语法错误异常。要输出单引号的方法很多,其中之一就是使用双引号将字符串括起来。

     >>> "Let's go!"
     "Let's go!"

现在输出单引号是解决了,但如何输出双引号?其实很简单,只需要用单引号将字符串括起来即可。

     >>> '我们应该在文本框中输入"Python"'
     '我们应该在文本框中输入"Python"'

现在输出单引号和输出双引号都解决了,那么如何同时输出单引号和双引号?对于这种需求,就要使用本节要介绍的另一个知识点:转义符。Python语言中的转义符是反斜杠(\)。转义符的功能是告诉Python解释器反斜杠后面的字符是字符串中的一部分,而不是用于将字符串括起来的单引号或双引号。所以如果字符串中同时包含单引号和双引号,那么转义符是必需的。

在上面这行代码中,单引号和双引号都是用的转义符,其实在这个例子中,由于字符串是由单引号括起来的,所以如果里面包含双引号,是不需要对双引号使用转义符的。

下面的例子演示了Python语言中单引号和双引号的用法,以及转义符在字符串中的应用。

     # 使用单引号的字符串,输出结果:Hello World
     print('Hello World')
     # 使用双引号的字符串,输出结果:Hello World
     print("Hello World")
     #  字符串中包含单引号,输出结果:Let's go!
     print("Let's go!")
     #  字符串中包含双引号,输出结果:"一起走天涯"
     print('"一起走天涯"')
     #  字符串中同时包含单引号和双引号,其中单引号使用了转义符,输出结果:Let's go! "一人我饮酒醉"
     print('Let\'s go! "一人我饮酒醉" ')

2.3.2 拼接字符串

微课视频

代码位置:src/basic/join_string.py

在输出字符串时,有时字符串会很长,在这种情况下,可以将字符串写成多个部分,然后拼接到一起。可以尝试下面的一种写法。

     >>> 'Hello' 'world'
     'Helloworld'

这种写法是将两个字符串挨着写到一起,字符串中间可以有0~n个空格。现在看这种方式能否将两个字符串变量的值组合到一起。

可以看到,如果是两个字符串类型的变量紧挨着写在一起,Python解释器就会认为是语法错误,所以这种方式实际上并不是字符串的拼接,只是一种写法而已,而且这种写法必须是两个或多个字符串值写在一起,而且不能出现变量,否则Python解释器就会认为是语法错误。

如果要连接字符串,要用加号(+),也就是字符串的加法运算。

     >>> x = 'Hello '
     >>> x + 'World'
     'Hello World'

2.3.3 保持字符串的原汁原味

微课视频

代码位置:src/basic/str_repr.py

在2.3.1节已经讲过转义符(\)的应用,其实转义符不光能输出单引号和双引号,还能控制字符串的格式,例如,使用"\n"表示换行,如果在字符串中含有"\n",那么"\n"后的所有字符都会被移到下一行。

     >>> print('Hello\nWorld')
     Hello
     World

如果要混合输出数字和字符串,并且换行,可以先用str函数将数字转换为字符串,然后在需要换行的地方加上"\n"。

     >>> print(str(1234) + "\n" + str(4321))
     1234
     4321

不过有时不希望Python解析器转义特殊字符,希望按原始字符串输出,这时需要使用repr函数。

     >>> print(repr("Hello\nWorld"))
     'Hello\nWorld'

使用repr函数输出的字符串,会使用一对单引号括起来。

其实如果只想输出"\n"或其他类似的转义符,也可以使用两个反斜杠输出"\",这样"\"后面的n就会被认为是普通的字符。

     >>> print("Hello\\nWorld")
     Hello\nWorld

除了前面介绍的repr和转义符外,在字符串前面加r也可以原样输出字符串。

     >>> print(r"Hello\nWorld")
     Hello\nWorld

现在总结一下,让一个字符串按原始内容输出(不进行转义),有如下3种方法。

· repr函数。

· 转义符(\)。

· 在字符串前面加r。

下面的例子完整地演示了str和repr函数的用法。

这段代码在使用repr函数输出的"<hello\nworld>"字符串被一对单引号括了起来,而且字符串长度是16。而使用str函数输出同样的字符串,长度是13。在str函数输出的字符串中,"\n"算一个字符,长度为1,而用repr函数输出的字符串中,"\n"是两个字符,长度为2。再加上一对单引号,所以长度是16。

2.3.4 长字符串

微课视频

代码位置:src/basic/long_string.py

使用3个单引号或双引号括起来的文本会成为一个长字符串。在长字符串中会保留原始的格式。

如果使用长字符串表示一个字符串,中间可以混合使用双引号和单引号,而不需要加转义符。

对于普通字符串来说,同样可以用多行来表示。只需要在每行后面加转义符(\),这样一来,换行符本身就"转义"了,会被自动忽略,所以最后都会变成一行字符串。

下面的代码演示了长字符串的用法。

程序运行结果如图2-4所示。

图2-4 输出长字符串