'hello\\world'
不是双重转义 - 只是在显示字符串的内部表示(又名“repr”)时,Python确实会转义反斜杠,因此您,查看此表示的人知道\\
代表字符串中的实际单个反斜杠字符,而不是另一个字符的转义序列。
当您调用 时print
,字符串表示是通过另一种方法完成的,该方法用于程序输出 - 即供程序用户使用。在这种表示中,“\”被正确地呈现为“\”,而其他序列,例如“\n”、“\t”、“\b”被呈现为它们所代表的真实字符(“\x0a”、在这种情况下为“\x09”和“\x07” - 或“LINE FEED”、“TAB”和“BACKSPACE”)。
前者是Python通过调用__repr__
任何对象中的方法来渲染的,它是任何Python交互环境用来展示表达式结果的。稍后使用的渲染print
会调用对象的__str__
方法。在代码中,不要直接调用这些方法,而应该分别调用内置函数repr(...)
和str(...)
.
此外,通过使用 f 字符串,可以轻松地在另一个文本片段中插入对象的所需视图。如果您想要“str”视图,只需将对象作为表达式{}
放在 f 字符串内部。如果需要内部表示,在结束之前}
,包括!r
序列:
In [192]: a = "Hello\world!"
In [193]: a
Out[193]: 'Hello\\world!'
In [194]: print(a)
Hello\world!
In [195]: print(repr(a))
'Hello\\world!'
In [196]: print(f"*{a}*{a!r}*")
*Hello\world!*'Hello\\world!'*
如您所见,即使键入单个“\”,如果其后的字符没有形成已知的转义序列,则“\”将单独使用 - 但显示为“\”,因为我们人类没有义务记住哪些是有效的转义序列,哪些不是。另一方面,在文字字符串中输入一个表示反冲的“\”是非常危险的,因为很可能会创建一个意想不到的其他字符。在 Python 3.8(目前处于测试阶段)中,这甚至会产生语法警告:
Python 3.8.0b2+ (heads/3.8:028f1d2479, Jul 17 2019, 22:42:16)
[GCC 9.1.1 20190503 (Red Hat 9.1.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = "hello\world!"
<stdin>:1: SyntaxWarning: invalid escape sequence \w
避免此警告的方法是始终键入 double\\
或使用r'
字符串的前缀:
>>> a = r"hello\world!"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句