为什么反斜杠会出现两次?
为什么反斜杠会出现两次?
在Zero Piraeus的回答中,解释了在使用单个反斜杠时(在原始字符串字面值之外),这是一个不好的做法。
但是还有一个额外的问题:将来,如果使用未定义的转义序列如\d,而不是表示一个字面上的反斜杠后跟一个d,将会报错。所以,你不再只是侥幸地使用\d而不是\t,以便它做你想要的事情,而是肯定不会做你想要的事情。
从3.6版本开始,它已经引发了一个DeprecationWarning,尽管大多数人看不到。在将来的某个版本中,它将变成一个SyntaxError。
在许多其他语言中,包括C语言,使用不以转义序列开始的反斜杠意味着忽略该反斜杠。
在一些语言中,包括Python语言,在不以转义序列开始的情况下,反斜杠是一个字面上的反斜杠。
在一些语言中,为了避免关于语言是否类似于C语言或Python语言的混淆,以及避免\foo不能工作但\Foo可以工作的问题,不以转义序列开始的反斜杠是非法的。
为什么反斜杠会出现两次?
你看到的是由my_string
的__repr__()
方法创建的表示。如果你打印它,你会发现你实际上得到的是单个反斜杠,就像你打算的那样:
>>> print(my_string) why\does\it\happen?
下面的字符串中有三个字符,而不是四个:
>>> 'a\\b' 'a\\b' >>> len('a\\b') 3
你可以使用内置函数repr()
来获取一个字符串(或任何其他对象)的标准表示:
>>> 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文档中的字符串和字节字面值。
我试图将这个答案集中在“双反斜杠”误解上,但了解原始字符串字面值也是有用的。
输入:'I am 5' 6' 输出:''I am 5\' 6'' 我正在努力寻找简单的方法来实现这一点,但似乎并不容易。请给予建议吗?
在评论中回答不同的问题是不现实的,但仔细阅读docs.python.org/3/tutorial/introduction.html#strings可能会有所帮助。请注意,为了明确表示一个同时包含单引号和双引号的字符串字面值,Python必须使用反斜杠对其中至少一个进行转义。还要注意,如上所述,在交互式控制台中表示一个字符串的方式与该字符串的内容不同。