原因:Python字符串赋值意外将'\b'变为'\x08'和'\a'变为'\x07',为何Python如此设计?

19 投票
2 回答
26245 浏览
提问于 2025-04-18 02:01

我看到有两个回答和一些评论,提到了另一个问题,但大家都没有解释为什么Python会做这样的改变?比如说,'/b'变成了'/x08',这只是结果,但为什么会这样呢?谢谢。

我尝试把这个路径"F:\big data\Python_coding\diveintopython-5.4\py"加到sys.path里,这样下面的代码就可以直接导入了。

在使用了:sys.path.append('F:\big data\Python_coding\diveintopython-5.4\py')之后,我发现这个路径在sys.path里变成了:'F:\x08ig data\Python_coding\diveintopython-5.4\py'

然后我测试了以下代码:mypath1='F:\big data\bython_coding\aiveintopython-5.4\ry'

结果mypath1现在变成了:'F:\x08ig data\x08ython_coding\x07iveintopython-5.4\ry'

所有的'\b'都变成了'\x08',而'\a'变成了'\x07'

我搜索了一段时间,但还是找不到原因,能不能请你帮我看看,任何反馈或帮助都非常感谢。谢谢!

2 个回答

10

转义序列 \a\b 分别等同于 \x07\x08

>>> '\a'
'\x07'
>>> '\b'
'\x08'

如果你想要在代码中表示反斜杠 \,你需要对它进行转义,也就是写成 \\

>>> '\\a'
'\\a'
>>> '\\b'
'\\b'

或者你可以使用原始字符串字面量,这样就不需要转义了:

>>> r'\a'
'\\a'
>>> r'\b'
'\\b'
17

你的字符串被转义了。可以看看关于 字符串字面量 的文档:

反斜杠(\)这个字符用来转义那些本来有特殊含义的字符,比如换行符、反斜杠本身,或者引号字符。字符串字面量可以选择性地以字母 r' 或 R' 开头;这样的字符串叫做原始字符串,它们对反斜杠的转义规则有所不同。

这种用法可以追溯到60年代早期。它允许你输入一些标准键盘上无法直接输入的字符。例如,如果你在Python解释器中输入:

print "\xDC"

...你会得到 Ü。在你的例子中,你有 \b - 代表退格键 - Python会以 \xhh 的形式显示它,其中 hh 是08的十六进制值。\a 是ASCII铃声的转义序列:试试 print "\a",打开声音,你应该能听到一声哔。

撰写回答