• 本人在学习 Python 过程中对转义字符的用法不甚了解,在网上搜索一番过后没有发现一份很全面、详细的解读,于是自己整理了一份,制作不易,还请大家点赞支持一下。

  • 文章在格式上可能与本人编辑的 Markdown 文件有所出入,建议各位去下载一份该文章的md文件(free)。


转义字符

描述

\ (在行尾时)

续行符

\\

反斜杠符号

\'

单引号

\"

双引号

\a

响铃

\b

退格(Backspace)

\0 / \000

空字符(NULL)

\n

换行

\v

纵向制表符

\t

横向制表符

\r

回车

\f

换页

\oyy

八进制数 yy 代表的字符,例如, \o12 代表换行

\xyy

十六进制数 yy 代表的字符,例如, \x0a 代表换行

\other

其他字符以普通格式输出

\ddd

1到3位八进制数所代表的的任意字符

1. \ (在行尾时)- 续行符

  • 在每一行代码的最后添加 \ ( 注意反斜杠后不能加空格! ),它可以将一行代码分成多行来写,打印结果仍是一行内容,便于代码的编写和阅读,打印结果仍是一行内容。

a = '<我是第1行的内容>\
<我是第2行的内容>\
<我是第3行的内容>\
<我是第4行的内容>'
print(a)  # <我是第1行的内容><我是第2行的内容><我是第3行的内容><我是第4行的内容>

2. \\ - 反斜杠符号

  • 用 \\ 在字符串里表示反斜杠。

print("Hello\\World")  # Hello\World

3. \' - 单引号

  • 用 \' 在字符串里表示单引号。

print("What\'s your name?") # What's your name?

4. \" - 双引号

  • 用 \" 在字符串里表示双引号。

print("\"Hello World\"")  # "Hello World"

5. 程序员的小快乐——\a

  • 该转义字符在实际应用中很少见,往往作为程序员的一个小彩蛋娱乐一下(或者可以在流程控制语句中导出 False时响铃提示?此处挖个坑,日后搞懂了来填坑)。在 Python 的解释器中无法真正响铃,在输出含有 \a 的字符串时,\a 的位置会由一个类似于 ^BELL^ 的标识表示出来。如:

a = 'Hello world!\a'
print(a)

得到的结果是这样的:

  • 真正实现响铃操作,则需要 win + R 键,输入 cmd 打开控制台:

输入 Python 进入其解释器模式,然后输入以下代码:

import time
while True:
	print("\a")
	time.sleep(1)  # 每次响铃的间隔时间为1秒

然后连敲两次回车键,就可以听到每秒响一次的系统提示音了,关闭控制台即可退出该程序。

6. \b - 退格

  • \b 相当于用了一次退格键 Backspace 。

print("Hello World\b")  # Hello Worl
  • 看到这里有人(比如说我)就有疑问了,既然 \b 相当于用了一次退格键 Backspace ,那为什么还要用这个转义字符呢,我直接把要删除的内容删掉不比这来的简单吗。

  • 实际在计算机语言当中, Backspace 并不是删除的指令。组成 Backspace 的两个英文单词 back 和space 分别是回去和空间的意思,组合起来就是”往回走一步“,但与方向左键不同, Backspace 在向左移动光标位置的同时,将后面所有的内容都往前移了一个单位,并替换掉原有内容 。当我们在 Python 中输入字符时,如果输入后立即发现错误,使用 Backspace 键进行修改,这其实是使用退格键将后面的空(NULL)前移了一个单位 ,并替换掉当前位置的内容,给输入者以“删除”的假象。(根据个人理解编写,不一定完全正确)

  • 那么 \b 有什么实际作用呢?

  • \b 可以连续使用,相当于连续敲 Backspace 键,而在最后一个 \b 后的内容也将替代原有内容,相当于起到替换的作用,而这种方法能够不破坏源代码。

print("Hello World\b\b\b\b\bDevil Ding")  # Hello Devil Ding
  • 此外用 \b 将特定字符串包裹,可以实现对某特定字符串的查找功能。

import re

a = ['hello','Cat',' cat', 'cat h','CAT','CAt-h','Cat_h']
p = re.compile(
    r'\bcat\b', re.I)
print([s
       for s in a
       if re.search(p, s)])  # ['Cat', ' cat', 'cat h', 'CAT', 'CAt-h']
  • 本人暂时就了解到 \b 的以上两种实际作用,欢迎大佬补充!本人在以后的学习中如果有遇到更多关于 \b 的用途,会对本文进行补充。

7. \0 / \000 - 空字符

  • \0 和 \000 乃至 \00 都是表示空字符(前两个更常见一些)。用来补足字符长度,满足某些项目对于等长字符串的需求。它们都表示一个空字符。在运行代码时空字符的位置会由类似上面 \a 的BELL的样式的NULL代替。 \ 后多出三个零的部分正常输出。

print(len("Hello World") )  # 11
print(len("Hello World\0") )  # 12
print("Hello World\000")
print("Hello World\0000")  # 结果如下图所示

8. \n - 换行

  • 与 \ 相反, \n 是将一行输出为多行。

print("<我是第1行的内容>\n<我是第2行的内容>\n<我是第3行的内容>\n<我是第4行的内容>") 

9. \v - 纵向制表符

  • 使用 \v ,纵向产生4个空字符,相当于竖着用 Tab 键。

  • 暂时没有想到怎么用,未来进行补充。

10. \t - 横向制表符

  • 使用 \t ,横向产生4个空字符,相当于用 Tab 键。

print("Hello\n\tWorld")

11. \r - 回车

  • 在日常使用 Word 编辑文本时,回车键就是另起一行,从行首开始输入。但在 Python 中,\r 与 \n 的用法却大相径庭。\r (return) 指回到本行行首,\n (new line) 指开启新的一行。因此,要注意在编程语言中的回车与退格,和我们日常工作所理解的用法有很大区别!实例如下:

print("Hello", end="")
print("\r", end="")
print("World!", end="")

print("over\r")
print("\nover")

print("Hello", end="")
print("\n", end="")
print("World", end="")

12. \f - 换页

  • \f 后的内容实现换页打印,一般在调用文档编辑工具的页面实现此效果,直接打印会显示和上述 BELL & NULL 类似的字符效果。

13. \oyy

  • 两位八进制数 yy 代表的字符。

14. \xyy

  • 十六进制数 yy 代表的字符。与 \oyy 具体表示内容参考下图(先将八进制或十六进制数转化为十进制数再查找对应字符)。如 \o12 & \x0a 都代表换行。

  • 需要注意的是:yy 表示两位数,因此 \oyy 无法显示所有的 ASCII 字符。这样就需要用到 \ddd 的方法用哪个八进制表示所有 ASCII 字符。

15. \other

  • 其他字符以普通格式输出。

16. \ddd

  • 三位八进制数 ddd 代表的 字符。

原字符 r / R

  • 在存在转义字符的字符串前输入 r / R ,则转义机制失效,打印包括转义字符的所有内容。

print(r"Hello\\World")   # "Hello\\World"

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐