0

1.15Python下长字符串和原始字符串

Posted by 撒得一地 on 2015年11月28日 in python教程

之前介绍了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\

注意,你可以在原始字符串中同时使用单双引号,即使三引号字符串也可以充当原始字符串。

标签:,

上一篇:

下一篇:

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

6 + 1 = ?

网站地图|XML地图

Copyright © 2015-2018 技术拉近你我! All rights reserved.
闽ICP备15015576号-1,版权所有©psz.