为什么在Python中转义字符会变成像\x0这样的字符串?

3

我这里有一个简单的问题:

mylist=[1,2,3]
mylist.insert(0, '\0')
print(mylist) 

给我们:

['\x00', 1, 2, 3]

换句话说,为什么和如何将转义字符\变成\x0?这是有什么目的吗?是一种编码方式吗? 为什么Python会返回一种表示而不是另一种?

4
\0\x00只是同一事物的两种不同表示方式:零字节。 - Klaus D.
“通过‘representation’,您的意思是人类可读的打印输出吗?还是其他什么?为什么同一事物有两种不同的表示方式?DRY(不要重复自己)不是编程和设计的所有层面的基本原则吗?” - Monica Heddneck
DRY与此完全无关。而且一个事物总有许多表示方式,无论是人类可读的还是不可读的。就像在你的情况下,你有0的八进制和十六进制表示。 - Klaus D.
为什么Python返回了一个表示而不是另一个? - Monica Heddneck
Python总是返回其一种首选表示。但是,您可以使用不同的方式创建相同的值,例如八进制和十六进制表示法。在底层,它是一个NUL字节,这个字节不能直接被人类所表示,并且它不记得如何被创建。 - deceze
1个回答

3

所以\<各种单个字符>具有特殊含义,而\xYY是一个十六进制值为YY的字符。以下内容(和其他内容)是等效的:

>>> assert '\0' == '\x00'   # null
>>> assert '\t' == '\x09'   # tab
>>> assert '\r' == '\x0d'   # carriage return
>>> assert '\n' == '\x0a'   # line feed

这是因为制表符被编码为 9 等。通常情况下,如果 Python 无法显示字符本身,则会显示该字符的十六进制值,这是最通用的表示方法。
String Literal Docs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接