1.15Python下长字符串和原始字符串
下一篇: 2.1Python下序列概述
之前介绍了Python字符串,不过在长达多行的字符串或者包含多种特殊字符的字符串时,这时候就可以考虑长字符串和原始字符串这两种表示类型了。
长字符串
如果需要写一个非常非常长的字符串,它需要跨多行,那么,就可以使用三个引号代替普通引号。如:
>>> ''' I am a good boy. ... I like play basketball. ... but I don't like swimming''' " I am a good boy.\nI like play basketball.\nbut I don't like swimming"
也可以使用三个双引号,如:
>>> """Like This""" 'Like This'
注意,因为这种与众不同的引用方式,所以,你可以在字符串之中使用单引号和双引号,而不需要使用反斜线进行转义。普通字符串也可以跨行,如果一行之中最后一个字符是反斜线,那么,换行符本身就被“转义”了,也就是被忽略了。
例如:
>>> print("Hello \ ... world!") Hello world!
这个用法同样也适用于表达式和语句:
>>> 1+2+\ ... 3 6
原始字符串
原始字符串对于反斜线会把它当做普通字符那样对待,不会去解析它。在普通字符串中,反斜线有特殊的作用:它会转义,可以在字符串中加入通常情况下不能直接加入的内容。例如,换行符可以写成\n,并可以放在字符串中,如下所示:
>>> print('Hello,\nWorld!') Hello, World!
不过有时候上面并不是想要的结果。如果希望在字符串中包含反斜线再加上字符n那么要怎么办?例如,可能需要像DOS路径“C:\nowhere”这样的字符串:
>>> path = 'C:\nowher' >>> path 'C:\nowher'
这看起来好像是正确的,但是,在打印字符串时就会发现问题:
>>> print(path) C: owher
这并不是期望的结果,我们可以使用反斜线对其本身进行转义:
>>> print('C:\\nowhere') C:\nowhere
对于比较短的字符串可以这样做,但是对于长字符串,那么可能就需要很多反斜线:
>>> path = 'C:\\program Files\\window\\software\\Python' >>> print(path) C:\program Files\window\software\Python
在这样的情况下,原始字符串就派上用场了。原始字符串不会把反斜线当作特殊字符。在原始字符串中输入的每个字符都会原样输出:
>>> print(r'C:\nowhere') C:\nowhere >>> print(r'C:/program Files/window/software/Python') C:/program Files/window/software/Python
原始字符串以r开头。基本上可以在原始字符串中放入任何字符,当然,我们也要像平常一样对引号进行转义,但是,最后输出的字符串包含了转义所用的反斜线:
>>> print(r'Let\'s go!') Let\'s go!
不能在原始字符串结尾输入反斜线。换句话说,原始字符串最后的一个字符不能是反斜线,除非你对反斜线进行转义(用于转义的反斜线也会成为字符串的一部分)。如果最后一个字符(位于结束引号前的那个)是反斜线,Python就不清楚是否应该结束字符串:
>>> print(r'This is illegal\') File "<stdin>", line 1 print(r'This is illegal\') SyntaxError: EOL while scanning string literal
但是如果希望原始字符以一个反斜线作为结尾的话,本质上的解决办法就是把反斜线单独作为一个字符串来处理。以下是一种简单的做法:
>>> print(r'C:\program\python' '\\') C:\program\python\
注意,你可以在原始字符串中同时使用单双引号,即使三引号字符串也可以充当原始字符串。
下一篇: 2.1Python下序列概述