Python 为什么不';t逃逸序列在元组中工作

Python 为什么不';t逃逸序列在元组中工作,python,tuples,linefeed,Python,Tuples,Linefeed,为什么转义序列在打印时不能在元组中工作 x = ("a\n", "b\n", "c\n") y = ("a\n" "b\n" "c\n") print (x) print(y) 为什么它会打印(x)返回('a\n','b\n','c\n')和打印(y) 默认情况下,\n采用新行,无论您存储的是什么,解释器都知道您希望在下一行中存储一些值。所以,它就是这样打印的。试试

为什么转义序列在打印时不能在元组中工作

 x = ("a\n", "b\n", "c\n") 
 y = ("a\n" "b\n" "c\n")
 print (x)
 print(y)
为什么它会打印(x)返回
('a\n','b\n','c\n')
和打印(y)


默认情况下,
\n
采用新行,无论您存储的是什么,解释器都知道您希望在下一行中存储一些值。所以,它就是这样打印的。

试试这个

print("a{nl}"
      "b{nl}"
      "c".format(nl="\n"))

逃逸序列确实有效
x
被打印为元组,因为它是元组。如果您想加入它的元素,请使用
str.join()
,或者让
print()
为您加入它

>>> x = ('a\n', 'b\n', 'c\n')
>>> x
('a\n', 'b\n', 'c\n')
>>> ''.join(x)
'a\nb\nc\n'
>>> print(''.join(x))
a
b
c

>>> print(*x, sep='')
a
b
c

>>>
同时,
y
是由于

因为
(“a\n”、“b\n”、“c\n”)
是一个元组,而
(“a\n”“b\n”“c\n”)
是一个字符串:

(“a\n”“b\n”“c\n”)
“a\n”“b\n”“c\n”
相同,反过来又与
“a\nb\nc\n”
相同

(可以将
“Hello,world.”
字符串文字写成
“Hel”“lo,wor”“ld.”
,在各部分之间无
+
。)


现在,
print()
函数打印一个非字符串对象(例如元组),首先应用其
方法将其转换为字符串(产生与标准函数
str()
相同的结果)

str(((“a\n”、“b\n”、“c\n”))
的结果是字符串
“(“a\\n”、“b\\n”、“c\\n”)”
-其中没有换行符,如您所见,它由这21个字符组成:


与元组的此字符串表示形式相反,字符串
(“a\n”“b\n”“c\n”)
别名
“a\nb\nc\n”
由6个字符组成,其中3个为新行字符:


a
\n
b
\n
c
\n

它将数据打印为元组。尝试
print(“”.join(x))
以文本形式打印。如果需要,每个对象类型都有自己的转换为字符串的方法。元组返回一个
repr
esetation,在简单的情况下,它可以像Python代码一样用于重新创建元组。为此,元组还要求其项显示其Python表示(甚至字符串),而不是打印输出。请参见函数
str
repr
。@MichaelButscher所以元组使用repr表示strigns,字符串使用str函数表示string?@James Right。更确切地说,
print
要求每个对象使用其
str
表示,这与元组的
repr
表示相同。Python设计者可能认为为元组和许多其他数据类型定义一个真正的
str
函数没有意义,因为每个人都希望它们有另一种人类可读的表示形式。@James no,
str
对象,所有对象,使用
\uuuu repr\uuuu
\uuu str\uuuu
取决于您正在执行的操作<代码>元组
对象,以及其他内置容器,如
列表
dict
等,使用它们包含的对象的
\uuuuuu repr\uuu
来构造它们自己的
\uu repr\uuuu
输出,我在问为什么元组在使用escapelike时的行为是这样的,我在试图理解为什么元组会这样做that@James“为什么”的答案是“因为这是
元组
对象的实现者决定做的”您可以创建自己类型的容器,如果愿意,可以选择不同的方式。这里有两种类型的字符串格式,一种是str.format(),另一种是f或f。这只是字符串格式化,所以它的行为类似于新行。在set.MarinD中使用f格式,所以tuple使用repr来表示str对象?和字符串使用str()?不,两者都使用
str()
。不同之处在于,元组的字符串表示形式中没有换行符(
\n
),而是两个独立的
\
n
字符。请尝试(使用
x
元组)以清楚地看到它:
for i in(str(x)):print(i)
谢谢我不明白\\为什么来自?
\\
是一个反斜杠的转义序列。它说的是“我是真正的反斜杠,而不是转义序列的开始。”因此˙
\\n
表示两个符号-一个反斜杠和字母
n
,而
\n
表示一个符号-换行符。
>>> x = ('a\n', 'b\n', 'c\n')
>>> x
('a\n', 'b\n', 'c\n')
>>> ''.join(x)
'a\nb\nc\n'
>>> print(''.join(x))
a
b
c

>>> print(*x, sep='')
a
b
c

>>>
>>> y = ("a\n" "b\n" "c\n")
>>> y
'a\nb\nc\n'
>>> print(y)
a
b
c

>>>