从链接,r前缀是关于原始字符串。实际上,有些情况让我很难理解r的功能。我来说说我的看法:
'H:\\Education'
等于 r'H:\Education'
,因为 r 前缀表示不转换字符。但是,如果在 Python 中测试,'H:\Education'
等于 'H:\\Education'
。这里 r 的作用是什么,不管有 r领先,
\
都等于 \\
?'H:\Education'
等于'H:\\Education'
,'H:\Education\'
应该等于'H:\\Education\\'
或'H:\Education\\'
或'H:\\Education\'
,但实际上,这四个在Python中并不相同;为什么?是关于\
还是\\
的位置吗?r'C:\Program Files\7-Zip\7z.exe'
是正确的而'C:\Program Files\7-Zip\7z.exe'
是不正确的?r'H:\Education\'
错了,为什么?所以,有时 r 有功能,有时没有。我该如何告诉他们并做出正确的选择?
r
前缀阻止转义序列被解释。例如,\E
恰好不是转义序列,因此是'\E' == r'\E'
,但'\n'
是换行符。您永远不应该仅仅为了节省键入额外的反斜杠或 r
前缀而依赖此行为;它非常脆弱。
至于字符串文字末尾的反斜杠:无论好坏*,像
r
和 f
这样的前缀不会影响字符串文字的语法,只会影响其解释。这意味着在像 r'foo\'
这样的代码片段中,\
仍然用于转义结束引号,例如,您需要编写 r'foo' '\\'
来获取所需的字符串。
>>> print(r'foo\bar' '\\')
foo\bar\
* 更好:解析变得更容易,并且与新前缀向前兼容。更糟糕的是:这个问题。