>> string = "\test\test\1\2\3" >>> string '\test\tes-6ren">
gpt4 book ai didi

python - 为什么字符串中的数字前面有反斜杠时会变成 "x0n"?

转载 作者:太空狗 更新时间:2023-10-30 01:58:20 24 4
gpt4 key购买 nike

我在 Python 3.4 shell 中用转义反斜杠做了一些实验,发现了一些很奇怪的东西。

>>> string = "\test\test\1\2\3"
>>> string
'\test\test\x01\x02\x03'
>>> string = "5"
>>> string
'5'
>>> string = "5\6\7"
>>> string
'5\x06\x07'

在上面的代码中可以看到,我定义了一个变量字符串为"\test\test\1\2\3"。但是,当我在控制台中输入 string 时,它没有打印 "\test\test\1\2\3",而是打印了 "\test\test\x01\x02\x03"。为什么会出现这种情况,它的用途是什么?

最佳答案

在 Python 字符串文字中,\ 字符开始转义序列。 \n 转换为换行符,\t 转换为制表符,等等。\xhh 十六进制序列让您生成具有十六进制值的代码点, \uhhhh 生成具有 4 位十六进制值的代码点,\Uhhhhhhhh 生成具有 8 位十六进制值的代码点。

参见 String and Bytes Literals documentation ,其中包含所有可能转义序列的表格。

当 Python 在解释器中回显一个字符串对象(或者您在字符串对象上使用 repr() function)时,Python 会创建字符串值的表示。该表示恰好使用完全相同的 Python 字符串文字语法,以便更轻松地调试您的值,因为您可以使用该表示重新创建完全相同的值。

为了防止不可打印的字符造成破坏或根本不显示,Python 使用相同的转义序列语法来表示这些字符。因此,不可打印的字节使用合适的 \xhh 序列表示,或者如果可能,使用 \c 单字母转义之一(因此换行符显示为 \n).

在您的示例中,您使用 \ooo octal value 转义序列语法创建了不可打印的字节。这些数字被解释为八进制数以创建相应的代码点。当回显该字符串值时,默认的 \xhh 语法用于以十六进制表示完全相同的值:

>>> '\20' # Octal for 16
'\x10'

当你的 \t 变成一个 tab 字符时:

>>> print('\test')
est

请注意那里没有字母 t;相反,剩余的 est 由空格缩进,这是一个水平制表符。

如果您需要包含文字 \ 反斜杠字符,您需要加倍该字符:

>>> '\\test\\1\\2\\3'
'\\test\\1\\2\\3'
>>> print('\\test\\1\\2\\3')
\test\1\2\3
>>> len('\\test\\1\\2\\3')
11

请注意,表示使用了双反斜杠!否则,您将无法复制该字符串并将其粘贴回 Python 以重新创建该值。使用 print() 将值作为实际字符(而不是字符串表示形式)写入终端表明那里有单个反斜杠,并且计算长度表明我们在字符串中只有 11 个字符,而不是 15。

您还可以使用原始 字符串文字。这只是一种不同的语法,从语法创建的字符串对象是完全相同的类型,具有相同的值。这只是拼写字符串值的一种不同方式。在原始字符串文字中,反斜杠就是反斜杠,只要它们不是字符串中的最后一个字符;大多数转义序列在原始字符串文字中不起作用:

>>> r'\test\1\2\3'
'\\test\\1\\2\\3'

最后但同样重要的是,如果您要在 Windows 系统上创建代表文件名的字符串,您还可以使用正向斜杠; Window 中的大多数 API 不介意并接受两种类型的斜杠作为文件名中的分隔符:

>>> 'C:/This/is/a/valid/path'
'C:/This/is/a/valid/path'

关于python - 为什么字符串中的数字前面有反斜杠时会变成 "x0n"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com