为了账号安全,请及时绑定邮箱和手机立即绑定

为什么反斜杠出现两次?

为什么反斜杠出现两次?

肥皂起泡泡 2019-06-15 10:45:49
为什么反斜杠出现两次?当我创建一个包含反斜杠的字符串时,它们会被复制:>>> my_string = "why\does\it\happen?">>> my_string'why\\does\\it\\happen?'为什么?
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

你看到的是表象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字符串文字的更多信息,请参见:String和Bytes文字在Python文档中。


查看完整回答
反对 回复 2019-06-15
?
慕村225694

TA贡献1880条经验 获得超4个赞

零比雷埃夫斯的回答解释,使用这样的单个反斜杠(在原始字符串文字是个坏主意。

但是还有一个额外的问题:在将来,使用一个未定义的转义序列将是一个错误,比如\d,而不是字面上的反斜杠,后面跟着d..所以,与其幸运的是你的字符串碰巧使用了\d而不是\t所以它做了你想做的事,它绝对不会做你想做的事。

从3.6开始,它已经引发了一个DeprecationWarning虽然大多数人看不到这些。它会变成SyntaxError在未来的版本中。


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

在包括Python在内的几种语言中,不启动转义序列的反斜杠就是文字反斜杠。

在某些语言中,为了避免混淆语言是C类还是Python类,以及\Foo工作但\foo如果反斜杠不起作用,则不启动转义序列的反斜杠是非法的。


查看完整回答
反对 回复 2019-06-15
  • 2 回答
  • 0 关注
  • 862 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信