2.3.1 字符串类型的字面值形式

由于计算机程序本身要用字符序列来表示,因此程序中的命令、变量名、字面值、标点

符号等等都是字符组成的序列,但它们是程序构件而不是数据。这就带来一个问题:如何区 分程序中的某一个字符序列到底是字符串数据还是程序构件?几乎所有编程语言都采用了 加引号的方法来解决这个问题:字符串数据必须用一对引号括起来。

Python 语言提供了字符串数据类型 str,并且在表示字符串数据方面比其他语言更灵 活。在 Python 中,字符串的字面值有四种形式:

(1)用单引号括起来的字符串,例如

>>> 'a string enclosed in single quotes'
'a string enclosed in single quotes'

(2)用双引号括起来的字符串,例如

>>> "a string enclosed in double quotes"
'a string enclosed in single quotes'

(3)用三个单引号括起来的字符串,例如

>>> '''a multiple-line string enclosed in
triple quotes'''
'a multiple-line string\nenclosed in\ntriple quotes'

(4)用三个双引号括起来的字符串,例如

>>> """a multiple-line string enclosed in
triple double-quotes"""
'a multiple-line string\nenclosed in\ntriple double-quotes'

用单引号或双引号括起来的字符串必须在一行内表示,是程序设计中最常用的形式。而 用三个单引号或三个双引号括起来的字符串可以是多行的,主要用于一个特殊用法——文档 字符串(docstring),具体用法在略过。

字符串可以存储在变量中,从而得到字符串类型的变量。例如:

>>> s = "Hello"
>>> type(s)
<type 'str'>

用单引号还是双引号来界定字符串并没有差别,Python 之所以提供这两种表示法,是 为了能更方便地表示某些字符串。例如,如果使用双引号作为界定符,而我们的文本数据是

He said, "OK".

即字符串数据本身使用了双引号这个字符,那么如下形式的字符串数据

"He said, "OK"."

显然要出问题,因为 Python 在从左向右读这个字符序列的时候,会将"He said, "解释成 一个字符串数据,然后又因为无法解释后面的字符序列 OK"."而导致出错。为了避免出现 这样的问题,我们可以使用单引号来界定字符串,从而得到

'He said, "OK".'

Python 对这个字符串完全可以给出正确解释:看到第一个单引号,就知道开始了一个字符 串,接下去的字符(包括双引号)都是字符串的组成部分,直至遇见第二个单引号为止。

类似地,如果文本数据中出现了单引号字符,那么我们可以使用双引号作为字符串界定 符,如"Tom's World"之类。较真的读者马上会联想到:那万一文本数据中既有单引号又 有双引号怎么办?例如:

He said, "I'll do it".

这种情况下用单引号或双引号都会出错。Python 的解决方法是使用转义字符“\”,例如上 面这个文本数据在程序中可以用如下字符串表示:

"He said, \"I'll do it\"."

其中\"使得双引号不再按界定符的意义解释,而是转变为普通的双引号意义。举一反三, 显然下面这种形式的字符串也是正确的:

'He said, "I\'ll do it".'

因为用单引号作为字符串界定符,所以字符串内部的单引号要用转义字符“\”来转变意义。