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
>>>