美文网首页
伪·从零开始学Python - 2.2.2 数据类型 - 字符串

伪·从零开始学Python - 2.2.2 数据类型 - 字符串

作者: 阿啊阿吖丁 | 来源:发表于2018-03-23 14:57 被阅读18次

本小节起,我们约定:在展示代码时,以下格式表示在Python Shell中输入。

>>> 输入代码
... 继续代码
输出代码

基本介绍

字符串(str)是表示文本的数据类型,可以有一个或多个Unicode字符。

字符串需要用单引号(')或双引号(")包住(注意是英文状态下的不分左右的引号)。至于具体的区别,如果字符串中包含单引号,最好使用双引号包住;如果字符串中包含双引号,最好使用单引号包住。

"It's excited! "
'He said: "Hello!" '

转义

如果一个字符串中两种引号都有,怎么办?这就要用到Python的转义字符了。在需要转义的符号前面加上反斜杠(\),就能解决问题。你甚至可以在字符串内所有的引号都使用转义,虽然这样做非常不专业。

'"I\'m excited!" said him. '
"\"I'm excited!\" said him. "
'\"I\'m excited!\" said him. '

但是,如果你直接在Python Shell中输入上面的字符串,按回车,它只会直接输出和输入相同的字符;但是,如果你使用print函数打印字符串,就能输出预想的字符了。

字符串转义使用print函数,其中的“It's”改为“I'm”……

转义可以用在很多方面,比如换行、制表符。

转义字符 含义
\\ 反斜杠(\)
\' 单引号(')
\" 双引号(")
\a ASCII蜂鸣(BEL)
\b ASCII退格(BS)
\f ASCII走纸(FF)
\n ASCII换行(LF)
\N{name} 给定名称(name)的Unicode字符
\ooo 给定八进制值(ooo)的字符
\r ASCII回车符(CR)
\t ASCII制表符(TAB)
\uhhhh 给定16位十六进制值(hhhh)的Unicode字符
\Uhhhhhhhh 给定32位十六进制值(hhhhhhhh)的Unicode字符
\v ASCII垂直指标(VT)
\xhh 给定8位十六进制值(hh)的Unicode字符

我们可以看下面一个比较极端的例子:

print('2018-01-01\tbiaos\bzhifu\53\n2018-01-02\t\N{CJK UNIFIED IDEOGRAPH-87D2}\u86c7\\\n2018-01-03\tPython\r2018-01-04\t\U0001F602')

输出结果如下(由于各终端对字符的支持不一样,因此举几个例子):

(Deepin Linux 深度终端,使用Noto Mono字体)
2018-01-01  biaozhifu+
2018-01-02  蟒蛇\
2018-01-04  😂thon

(通过Windows 10上的PuTTY连接的CentOS 7,使用Inziu IosevkaCC SC字体,其中的表情只显示了半个脸)
2018-01-01      biaozhifu+
2018-01-02      蟒蛇\
2018-01-04      😂ython

(Windows 10上的PowerShell,使用Inziu IosevkaCC SC字体,其中的表情显示为两个方框;在Atom中使用platformio-ide-terimal插件调用PowerShell时,可以正常显示)
2018-01-01      biaozhifu+
2018-01-02      蟒蛇\
2018-01-04      😂on

(Windows 10 上的PyCharm 2017.3.4,使用Inziu IosevkaCC SC字体)
2018-01-01  biaozhifu+
2018-01-02  蟒蛇\
2018-01-04  😂
两个表情的异常显示情况

此外还有一种情况:如果字符串非常长的时候,可以使用\后面另起一行继续:

print('Hello \
World')

输出结果为Hello World

有时候一个字符串可能会用到大量的反斜杠,严重影响视觉。这时候我们可以在字符串的前面加上r或者是R,表示字符串内的文本不转义。

>>> print('C:\name\bag\test.py')
C:
amag    est.py
>>> print('C:\\name\\bag\\test.py')
C:\name\bag\test.py
>>> print(r'C:\name\bag\test.py')
C:\name\bag\test.py

但是,遇到字符串包含与包围字符串的引号相同的引号的时候,无解。有意思的是,如果这种情况下不加反斜杠,会报错;加了反斜杠,它会连同反斜杠也输出来。

不转义的有趣情况

多行文本

此外,Python还可以使用前后三个单引号或双引号(两边的引号类型要一致)的形式直接显示多行字符串(单行也可以),不需要在换行处加\n。在其中仍然可以使用转义,但一个或两个出现的引号不用转义。

print('''"I'm excited!\U0001F602" said him. ''')
print("""春眠不觉晓
处处闻啼鸟
夜来风雨声
花落知多少""")

输出结果:

"I'm excited!😂" said him. 
春眠不觉晓
处处闻啼鸟
夜来风雨声
花落知多少

实际上,单独使用这样的多行文本可以当作Python里面的多行注释。在很多代码中都是这样(这时候就不需要考虑转义的问题了)。

多行注释

参考资料

参​见0.1节。

相关文章

网友评论

      本文标题:伪·从零开始学Python - 2.2.2 数据类型 - 字符串

      本文链接:https://www.haomeiwen.com/subject/mwygqftx.html