处理Python中“r”前缀和“+”中反斜杠的最后一个字符

问题描述 投票:0回答:1

链接r前缀是关于原始字符串。实际上,有些情况让我很难理解r的功能。我来说说我的看法:

  1. 'H:\\Education'
    等于
    r'H:\Education'
    ,因为 r 前缀表示不转换字符。但是,如果在 Python 中测试,
    'H:\Education'
    等于
    'H:\\Education'
    。这里 r 的作用是什么,不管有
    r
    领先,
    \
    都等于 \\
  2. 由于
    'H:\Education'
    等于
    'H:\\Education'
    'H:\Education\'
    应该等于
    'H:\\Education\\'
    'H:\Education\\'
    'H:\\Education\'
    ,但实际上,这四个在Python中并不相同;为什么?是关于
    \
    还是
    \\
    的位置吗?
  3. 如果r在列表1中没有执行任何操作,为什么
    r'C:\Program Files\7-Zip\7z.exe'
    是正确的而
    'C:\Program Files\7-Zip\7z.exe'
    是不正确的?
  4. r'H:\Education\'
    错了,为什么?

所以,有时 r 有功能,有时没有。我该如何告诉他们并做出正确的选择?

python prefix
1个回答
0
投票

r
前缀阻止转义序列被解释。例如,
\E
恰好不是转义序列,因此是
'\E' == r'\E'
,但
'\n'
是换行符。您永远不应该仅仅为了节省键入额外的反斜杠或
r
前缀而依赖此行为;它非常脆弱。

至于字符串文字末尾的反斜杠:无论好坏*,像

r
f
这样的前缀不会影响字符串文字的语法,只会影响其解释。这意味着在像
r'foo\'
这样的代码片段中,
\
仍然用于转义结束引号,例如,您需要编写
r'foo' '\\'
来获取所需的字符串。

>>> print(r'foo\bar' '\\')
foo\bar\

* 更好:解析变得更容易,并且与新前缀向前兼容。更糟糕的是:这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.