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
不工作的问题,不启动转义序列的反斜杠是非法的。我试图将此答案集中在“双反斜杠”误解上,但了解这一点也很有用。