为什么在 Python 中打印元组(列表、字典等)时会加倍反斜杠?

twa*_*lig 5 python printing escaping backslash

在Python中,当我打印带有反斜杠的字符串时,它只打印一次反斜杠:

>>> print(r'C:\hi')
C:\hi
>>> print('C:\\hi')
C:\hi
Run Code Online (Sandbox Code Playgroud)

但我注意到,当您打印带有反斜杠的字符串元组时,它会打印双反斜杠:

>>> print((r'C:\hi', 'C:\\there'))
('C:\\hi', 'C:\\there')
Run Code Online (Sandbox Code Playgroud)

为什么打印元组时表现不同?

(请注意,这种情况在 Python 2 和 3 以及 Windows 和 Linux 中都会发生。)

kin*_*all 7

当您打印元组(或列表,或许多其他类型的项目)时,将打印所包含项目的表示形式 (repr() ) ,而不是字符串值。对于更简单的类型,表示形式通常是您必须在 Python 中键入才能获取值的内容。这使您可以更轻松地通过分隔它们的标点符号来区分容器中的项目,并辨别它们的类型。(想一想:是(1, 2, 3)三个整数的元组,还是字符串"1, 2"和整数3\xe2\x80\x94 的元组或其他值的组合?)

\n\n

要查看repr()任何字符串的:

\n\n
print(repr(r\'C:\\hi\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

在交互式 Python 提示符下,只需指定任何值(或变量或表达式)即可打印其repr().

\n\n

要将元组的内容打印为常规字符串,请尝试以下操作:

\n\n
items = (r\'C:\\hi\', \'C:\\\\there\')\nprint(*items, sep=", ")\n
Run Code Online (Sandbox Code Playgroud)\n\n

str.join()也很有用,特别是当您不打印而是构建一个稍后将用于其他用途的字符串时:

\n\n
text = ", ".join(items)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,这些项目必须已经是字符串(join需要这个)。如果它们不都是字符串,你可以这样做:

\n\n
text = ", ".join(map(str, items))\n
Run Code Online (Sandbox Code Playgroud)\n