为什么反斜杠会出现两次?
- 2024-11-20 08:43:00
- admin 原创
- 7
问题描述:
当我创建包含反斜杠的字符串时,它们会重复:
>>> my_string = "whydoesithappen?"
>>> my_string
'why\\does\\it\\happen?'
为什么?
解决方案 1:
您所看到的是其方法所创建的表示。如果您打印它,您会看到您实际上得到了单个反斜杠,正如您所期望的那样:my_string
`__repr__()`
>>> print(my_string)
whydoesithappen?
下面的字符串有三个字符,而不是四个:
>>> 'a\\b'
'a\\b'
>>> len('a\\b')
3
repr()
您可以使用内置函数获取字符串(或任何其他对象)的标准表示:
>>> print(repr(my_string))
'why\\does\\it\\happen?'
Python 在字符串中将反斜杠表示为,\
因为反斜杠是转义字符 - 例如,`表示换行符,
`表示制表符。
这有时会给你带来麻烦:
>>> print("this extis
otwhatitseems")
this extis
otwhatitseems
因此,需要有一种方法来告诉 Python 您真正想要的是两个字符`
`而不是换行符,您可以通过使用另一个字符转义反斜杠本身来实现:
>>> print("this\\textiswhatyou\\need")
this extiswhatyou
eed
当 Python 返回字符串表示形式时,它会采取安全措施,转义所有反斜杠(即使它们不是转义序列的一部分),这就是您所看到的。但是,字符串本身只包含单个反斜杠。
有关 Python 字符串文字的更多信息,请参阅:Python 文档中的字符串和字节文字。
解决方案 2:
正如Zero Piraeus 的答案所解释的那样,使用这样的单个反斜杠(在原始字符串文字之外)是一个坏主意。
但是还有一个额外的问题:将来,使用未定义的转义序列(如d
)而不是文字反斜杠后跟 )将是一个错误d
。因此,您的字符串并非只是幸运地恰好使用了d
而不是
所以它做了您可能想要的事情,它绝对不会做您想要的事情。
从 3.6 开始,它会导致DeprecationWarning
,尽管大多数人看不到它们。从 3.12 开始,它会导致。根据转义序列的文档,SyntaxWarning
这将在未来的某个版本中变成。SyntaxError
$ python3.6 -Wall -c 'print("d")'
<string>:1: DeprecationWarning: invalid escape sequence d
d
$ python3.12 -c 'print("d")'
<string>:1: SyntaxWarning: invalid escape sequence 'd'
d
在包括 C 在内的许多其他语言中,使用不以转义序列开头的反斜杠意味着该反斜杠被忽略。
在一些语言中,包括 Python,不作为转义序列开头的反斜杠是文字反斜杠。
Foo
在某些语言中,为了避免混淆该语言是类 C 语言还是类 Python 语言,以及为了避免出现能工作但不能工作的问题oo
,不以转义序列开头的反斜杠是非法的。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件