- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
>> string = "\test\test\1\2\3" >>> string '\test\tes-6ren">
我在 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/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!