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()
时会得到两个反斜杠。
答案 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'"