当前位置: 首页 > 面试题库 >

为什么在字符串中的数字前面加反斜杠会变成“ x0n”?

左丘恩
2023-03-14
问题内容

我在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位十六进制值的代码点。

请参阅 字符串和字节文字
文档
,其中包含所有可能的转义序列的表。

当Python在解释器中回显字符串对象(或在字符串对象上使用该repr()函数)时,Python将创建字符串值的
表示形式 。该表示恰好使用了完全相同的Python字符串文字语法,从而可以更轻松地调试值,因为您可以使用该表示来 重新创建 完全相同的值。

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

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

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

当您\t成为 制表 符时:

>>> 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'


 类似资料:
  • 问题内容: 我需要在路径字符串中替换为,但是以下代码失败。 有什么有用的建议吗? 问题答案: 使用函数filepath.ToSlash将操作系统路径分隔符替换为路径中的“ /”。 在Windows上,函数返回。在其他操作系统上,该函数按原样返回path参数。

  • 问题内容: 我该怎么做反斜杠的字符串替换。 输入源字符串: 在上面的字符串中,我想用“ /”替换“ \ /”; 更换后的预期产量: 我从第三方获得源字符串,因此可以控制字符串的格式。 这就是我尝试过的 试用1: 异常靠近索引1的意外内部错误\ 试用2: 无异常,但不执行必需的替换。什么都不做。 试用3: 无异常,但不执行必需的替换。什么都不做。 问题答案: 是不可变的-您在其上调用的每个方法都不会

  • 问题内容: 你被输出误导了-你所采用的第二种方法实际上可以实现你想要的,只是你不相信它. 顺便说一句,还有另一种字符串形式可能会更清晰一些: 问题答案: 你被输出误导了-你所采用的第二种方法实际上可以实现你想要的,只是你不相信它。 顺便说一句,还有另一种字符串形式可能会更清晰一些:

  • 我尝试了许多方法从已执行的(我不是指从输入)中获得单个反斜杠。 我可以将特殊字符作为tab、new line和许多其他字符,然后将它们转义为或或,但当非特殊字符在旁边时,我不能获得单个反斜杠。 我不想要这样的东西: 如果我尝试在0处获取字符,则得到而不是。

  • 问题内容: 我已经使用了很长时间了,到目前为止我还没有遇到任何问题。现在,我正在使用上传脚本,并且尝试在文件上传后返回一些JSON数据。 我有以下代码: 这给了我以下结果: 谁能告诉我为什么加斜杠? 更新 @Quentin说,事情是发生之间和与他的权利。 做一个给我以下结果: 这不是有效的JSON。它还添加,我不知道它来自哪里。 可能对我返回的数据有影响吗? 这是我的js脚本: 问题答案: 谁能告