Python自动将某些字符串转换为原始字符串?

时间:2018-12-20 23:44:39

标签: python string

Python似乎正在自动将字符串(不仅仅是输入)转换为原始字符串。有人可以解释这里发生了什么吗?

Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit 
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '\stest'
>>> s
'\\stest'
# looks like a raw string
>>> print(s)
\stest
>>> s = '\ntest'
>>> s
'\ntest'
# this one doesn't
>>> s = '\n test'
>>> s
'\n test'
>>> s = r'\n test'
>>> s
'\\n test'
>>> print(s)
\n test

question marked as a duplicate似乎很有用,但是我不明白为什么

>>> s = '\n test'
>>> s
'\n test'
>>> repr(s)
"'\\n test'"

在调用时不会得到两个反斜杠,而在调用repr()时会得到两个反斜杠。

1 个答案:

答案 0 :(得分:4)

\ n是有效的转义序列,'\n'是长度为1的字符串(换行符)。相比之下,\ s是无效的转义序列,因此Python 假定,您想要的是两个字符串:反冲字符加s字符。

>>> len('\s')
2

您在终端输出上看到的只是长度2字符串的常用表示形式。请注意,使用r'\s''\\s'来创建Python返回给您的字符串的正确方法是

>>> r'\s' == '\\s' == '\s'
True

这是不推荐使用的行为。在将来的Python版本(可能是下一个发行版)中,您的代码将出现语法错误。

由于您使用的是v3.7.1,因此如果希望了解有关不赞成使用的功能的此类用法,可以启用警告:

$ python -Wall
>>> '\s'
<stdin>:1: DeprecationWarning: invalid escape sequence \s
'\\s'

关于编辑后的后续问题:

>>> s = '\n test'
>>> s  # this prints the repr(s)
'\n test'
>>> repr(s)  # this prints the repr(repr(s))
"'\\n test'"