本小节起,我们约定:在展示代码时,以下格式表示在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
函数打印字符串,就能输出预想的字符了。
转义可以用在很多方面,比如换行、制表符。
转义字符 | 含义 |
---|---|
\\ |
反斜杠(\) |
\' |
单引号(') |
\" |
双引号(") |
\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节。
网友评论