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

11 浏览
0 Comments

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

当我创建一个包含反斜杠的字符串时,它们会被重复:\n

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

\n为什么会这样?

0
0 Comments

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

在Zero Piraeus的回答中,解释了在使用单个反斜杠时(在原始字符串字面值之外),这是一个不好的做法。

但是还有一个额外的问题:将来,如果使用未定义的转义序列如\d,而不是表示一个字面上的反斜杠后跟一个d,将会报错。所以,你不再只是侥幸地使用\d而不是\t,以便它做你想要的事情,而是肯定不会做你想要的事情。

从3.6版本开始,它已经引发了一个DeprecationWarning,尽管大多数人看不到。在将来的某个版本中,它将变成一个SyntaxError。

在许多其他语言中,包括C语言,使用不以转义序列开始的反斜杠意味着忽略该反斜杠。

在一些语言中,包括Python语言,在不以转义序列开始的情况下,反斜杠是一个字面上的反斜杠。

在一些语言中,为了避免关于语言是否类似于C语言或Python语言的混淆,以及避免\foo不能工作但\Foo可以工作的问题,不以转义序列开始的反斜杠是非法的。

0
0 Comments

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

你看到的是由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必须使用反斜杠对其中至少一个进行转义。还要注意,如上所述,在交互式控制台中表示一个字符串的方式与该字符串的内容不同。

0