Python 为什么反斜杠出现两次?

Python 为什么反斜杠出现两次?,python,string,escaping,backslash,repr,Python,String,Escaping,Backslash,Repr,当我创建包含反斜杠的字符串时,它们会被复制: >>> my_string = "why\does\it\happen?" >>> my_string 'why\\does\\it\\happen?' 为什么?您看到的是由其方法创建的my\u字符串的表示形式。如果您打印它,您可以看到您实际上有一个反斜杠,正如您所希望的: >>> print(my_string) why\does\it\happen? 下面的字符串中有三个字符,而不是四个:

当我创建包含反斜杠的字符串时,它们会被复制:

>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'

为什么?

您看到的是由其方法创建的
my\u字符串的表示形式。如果您打印它,您可以看到您实际上有一个反斜杠,正如您所希望的:

>>> print(my_string)
why\does\it\happen?
下面的字符串中有三个字符,而不是四个:

>>> 'a\\b'
'a\\b'
>>> len('a\\b')
3
您可以使用内置函数获取字符串(或任何其他对象)的标准表示形式:

>>> print(repr(my_string))
'why\\does\\it\\happen?'
Python将字符串中的反斜杠表示为
\
,因为反斜杠是转义字符-例如,
\n
表示换行符,
\t
表示制表符

这有时会给你带来麻烦:

>>> print("this\text\is\not\what\it\seems")
this    ext\is
ot\what\it\seems
因此,需要有一种方法告诉Python您真正想要的是两个字符
\n
,而不是换行符,您可以通过使用另一个字符转义反斜杠来实现:

>>> print("this\\text\is\what\you\\need")
this\text\is\what\you\need
当Python返回一个字符串的表示形式时,它会安全地进行操作,对所有反斜杠进行转义(即使它们不是转义序列的一部分),这就是您看到的。但是,字符串本身只包含一个反斜杠

有关Python字符串文本的更多信息,请参见:在Python文档中。

如前所述,使用这样的单个反斜杠(在外部)是个坏主意

但还有一个问题:在将来,使用未定义的转义序列(如
\d
)而不是后面跟着
d
的反斜杠将是一个错误。因此,您的字符串碰巧使用了
\d
而不是
\t
,因此它做了您可能想做的事情,而不是运气好,它肯定不会做您想做的事情

从3.6开始,尽管大多数人看不到这些。在未来的版本中


在包括C在内的许多其他语言中,使用不启动转义序列的反斜杠意味着忽略反斜杠

在一些语言(包括Python)中,不启动转义序列的反斜杠是文字反斜杠


在某些语言中,为了避免混淆该语言是类C语言还是类Python语言,并避免出现
\Foo
工作但
\Foo
不工作的问题,不启动转义序列的反斜杠是非法的。

我试图将此答案集中在“双反斜杠”误解上,但了解这一点也很有用。