为什么转义序列在元组中不起作用

Why don't escape sequences work in tuples

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

 x = ("a\n", "b\n", "c\n") 
 y = ("a\n" "b\n" "c\n")
 print (x)
 print(y)

为什么打印(x) return ('a\n', 'b\n', 'c\n') 和打印(y)

a 
b
c

默认情况下 \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 是一个字符串,因为 string literal concatenation

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

>>> 

因为("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() 函数打印一个 non-string 对象(例如您的元组)首先将其转换为字符串 应用其 .__str()__ 方法(产生与标准函数 str() 相同的结果)。

str(("a\n", "b\n", "c\n"))的结果是字符串"('a\n', 'b\n', 'c\n')"——里面没有换行符,如你所见,它由这21个字符组成:
( ' a \ n ' , ' b \ n ' , ' c \ n ' )


与您的元组的字符串表示形式相比,您的字符串 ("a\n" "b\n" "c\n") 别名 "a\nb\nc\n" 由 6 个字符组成,其中 3 个 换行符:

a \n b \n c \n