Python字符串详解(包含长字符串和原始字符串)

1年前 (2024-04-27)
若干个字符的就是一个字符串(String)。Python 中的字符串必须由双引号" "或者单引号' '包围,具体格式为:

"字符串内容"

'字符串内容'

字符串的内容可以包含字母、标点、特殊符号、中文、日文等全世界的所有文字。

下面都是法的字符串:

  • "123789"

  • "123abc"

  • "http://c.biancheng网站站点" rel="nofollow" />

    'I'm a great coder!'

    由于上面字符串中包含了单引号,此时 Python 会将字符串中的单引号与个单引号配对,这样就会把'I'当成字符串,而后面的m a great coder!'就变成了多余的内容,从而导致语法错误。

    对于这种情况,我们有两种处理方案:

    1) 对引号进行转义

    在引号前面添加反斜杠\就可以对引号进行转义,让 Python 把它作为普通文本对待,例如:

    str1 = 'I\'m a great coder!'

    str2 = "引文双引号是\",中文双引号是“"

    print(str1)

    print(str2)

    运行结果:

    I'm a great coder!

    引文双引号是",中文双引号是“

    2) 使用不同的引号包围字符串

    如果字符串内容现了单引号,那么我们可以使用双引号包围字符串,反之亦然。例如:

    str1 = "I'm a great coder!" #使用双引号包围含有单引号的字符串

    str2 = '引文双引号是",中文双引号是“' #使用单引号包围含有双引号的字符串

    print(str1)

    print(str2)

    运行结果和上面相同。

    字符串的换行

    Python 不是格式自由的语言,它对程序的换行、缩进都有严格的语法要求。要想换行书写一个比较长的字符串,必须在行尾添加反斜杠\,请看下面的例子:

    s2 = 'It took me six months to write this Python tutorial. \

    Please give me more support. \

    I will keep it updated.'

    上面 s2 字符串的比较长,所以使用了转义字符\对字符串内容进行了换行,这样就可以把一个长字符串写成多行。

    另外,Python 也支持表达式的换行,例如:

    num = 20 + 3 / 4 + \

    2 * 3

    print(num)

    Python长字符串

    在《Python注释》一节中我们提到,使用三个单引号或者双引号可以对多行内容进行注释,这其实是 Python 长字符串的写法。所谓长字符串,就是可以直接换行(不用加反斜杠\)书写的字符串。

    Python 长字符串由三个双引号"""或者三个单引号'''包围,语法格式如下:

    """长字符串内容"""

    '''长字符串内容'''

    在长字符串中放置单引号或者双引号不会导致解析错误。

    如果长字符串没有赋值给任何变量,那么这个长字符串就不会起到任何作用,和一段普通的文本无异,相当于被注释掉了。

    注意,此时 Python 解释器并不会忽略长字符串,也会按照语法解析,只是长字符串起不到实际作用而已。

    当程序中有大段文本内容需要定义成字符串时,优先使用长字符串形式,因为这种形式非常强大,可以在字符串中放置任何内容,包括单引号和双引号。

    【实例】将长字符串赋值给变量:

    longstr = '''It took me 6 months to write this Python tutorial.

    Please give me a to 'thumb' to keep it updated.

    The Python tutorial is available at http://c.biancheng网站站点" rel="nofollow" />

    longstr = '''

    It took me 6 months to write this Python tutorial.

    Please give me a to 'thumb' to keep it updated.

    The Python tutorial is available at http://c.biancheng网站站点" rel="nofollow" />
        It took me 6 months to write this Python tutorial.
        Please give me a to 'thumb' to keep it updated.
        The Python tutorial is available at http://c.biancheng网站站点" rel="nofollow" /> 原始字符串。在原始字符串中,\不会被当作转义字符,所有的内容都保持“原汁原味”的样子。

    在普通字符串或者长字符串的开头加上r前缀,就变成了原始字符串,具体格式为:

    str1 = r'原始字符串内容'

    str2 = r"""原始字符串内容"""


    将上面的 Windows 路径改写成原始字符串的形式:

    rstr = r'D:\Program Files\Python 3.8\python.exe'

    print(rstr)

    原始字符串中的引号

    如果普通格式的原始字符串现引号,程序同样需要对引号进行转义,否则 Python 照样无法对字符串的引号精确配对;但是和普通字符串不同的是,此时用于转义的反斜杠会变成字符串内容的一部分。

    请看下面的代码:

    str1 = r'I\'m a great coder!'

    print(str1)

    输出结果:

    I\'m a great coder!


    需要注意的是,Python 原始字符串中的反斜杠仍然会对引号进行转义,因此原始字符串的结尾处不能是反斜杠,否则字符串结尾处的引号会被转义,导致字符串不能正确结束。

    在 Python 中有两种方式解决这个问题:一种方式是改用长字符串的写法,不要使用原始字符串;另一种方式是单独书写反斜杠,这是接下来要重点说明的。

    例如想表示D:\Program Files\Python 3.8\,可以这样写:

    str1 = r'D:\Program Files\Python 3.8' '\\'

    print(str1)

    我们先写了一个原始字符串r'D:\Program Files\Python 3.8',紧接着又使用'\\'写了一个包含转义字符的普通字符串,Python 会自动将这两个字符串拼接在一起,所以上面代码的输出结果是:

    D:\Program Files\Python 3.8\

    由于这种写法涉及到了字符串拼接的相关知识,这里读者只需要了解即可,后续会对字符串拼接做详细介绍。