MENU

Python 笔记 - 转义序列(字符)

• 2024 年 11 月 22 日 • 阅读: 409 • 未分类

〇、引入

尝试在 Python 当中直接打印 \this\is\not\the\boat,你会发现:

Python 3.12.5 (tags/v3.12.5:ff3bc82, Aug  6 2024, 20:45:27) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print("\this\is\not\the\boat")
<stdin>:1: SyntaxWarning: invalid escape sequence '\i'
        his\is
ot      hoat

输出内容很奇怪,还有一个 SyntaxWarning。这是怎么回事?

再试试打印 He's saying "Hello World"

>>> print('He's saying "Hello World"')
  File "<stdin>", line 1
    print('He's saying "Hello World"')
          ^^^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?

这又是怎么回事呢?

一、什么是转义序列?

Python 中,转义序列是一些无法直接输入具有特殊含义的字符。

Microsoft Learn - C 语言参考: 由反斜杠 ( \ ) 后接字母或数字组合构成的字符组合称为“转义序列”。要在字符常量中表示换行符,单引号或某些其他字符,必须使用转义序列。

使用转义字符可以方便地处理字符串中的特殊情况,比如上面提到的“换行”。

根据Python 文档,如未标注 'r''R' 前缀,字符串和字节串字面值中,转义序列以类似 C 标准的规则进行解释。

二、有哪些转义序列(字符)?

下方列出 Python 文档中提到的几个常见转义序列,表后将详细介绍。如果对其他相关知识感兴趣,可自行查阅 Python 文档

转义序列含意备注
\忽略反斜杠与换行符(1)
\\反斜杠(\
\'单引号('
\"双引号("
\aASCII 响铃(BEL)
\bASCII 退格符(BS)
\fASCII 换页符(FF)
\nASCII 换行符(LF)
\rASCII 回车符(CR)
\tASCII 水平制表符(TAB)
\vASCII 垂直制表符(VT)

注释:

  1. 可以在行尾添加一个反斜杠来忽略换行符:

    >>> 'This string will not include \
    ... backslashes or newline characters.'
    'This string will not include backslashes or newline characters.'
  2. ...... 与 C 标准不同,无法识别的转义序列在字符串里原样保留,即, 输出结果保留反斜杠 。(调试时,这种方式很有用:输错转义序列时,更容易在输出结果中识别错误。)

在 3.6 版本发生变更: 不可识别的转义序列会产生 DeprecationWarning

在 3.12 版本发生变更: 不可识别的转义序列会产生 SyntaxWarning。 在未来的 Python 版本中将最终改为 SyntaxError

上面的表格和注释解释了引入中第一部分输出内容的“奇怪”表现和 SyntaxWarning 的原因:Python 对输入内容进行了转义,同时出现了无法识别的“错误转义”——“\i”。

下面将继续介绍常用的转义序列。

1. \ - 续行符

参考上方注释,续行符对不同行的内容进行连接,使其作为完整的一行内容来输出。

2. \\ 与 \' 与 \" - 反斜杠、单引号和双引号

当需要在字符串中直接表示反斜杠 \ 时、在单引号字符串中插入双引号时、在双引号字符串中插入单引号时,可以使用它们进行转义并正常输出。

3. \a - 响铃符

让你电脑的操作系统发出提示音。

4. \b - 退格符

删除前一个字符。

5. \f - 换页符

在文本中插入换页。

6. \n - 换行符

表示换行——当前行在该点结束,其后立即开始新行。

7. \r - 回车符

将光标移动到行首。

8. \t 与 \v - 水平与垂直制表符

通常用于缩进,表示水平与垂直制表符。

三、如何避免不正确的转义?

可以通过在字符串前加上'r'来避免转义,这样 Python 就会将其视为原始字符串,不对其中的反斜杠进行转义。

例如,如果我们想要打印出路径 C:\new\text.txt ,但不希望反斜杠被转义,可以这样做:

print(r'C:\new\text.txt')
AbuseIPDB Contributor Badge