Why don't escape sequences work in tuples

387 Views Asked by At

Why dont the escape sequences work in tuples when printed

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

Why does it print(x) return ('a\n', 'b\n', 'c\n') and print (y)

a 
b
c
4

There are 4 best solutions below

6
On BEST ANSWER

Because ("a\n", "b\n", "c\n") is a tuple, but ("a\n" "b\n" "c\n") is a string:

("a\n" "b\n" "c\n") is the same as "a\n" "b\n" "c\n" what is in turn the same as "a\nb\nc\n".

(The "Hello, world." string literal is possible to write as "Hel" "lo, wor" "ld.", no + between parts.)


Now, the print() function prints a non-string object (as e.g. your tuple) converting it first to a string applying its .__str()__ method (which produces the same result as the standard function str()).

The result of str(("a\n", "b\n", "c\n")) is the string "('a\\n', 'b\\n', 'c\\n')"no newline characters in it, as you may see, it consists of these 21 characters:
              ( ' a \ n ' , ' b \ n ' , ' c \ n ' )


By contrast to this string representation of your tuple, your string ("a\n" "b\n" "c\n") alias "a\nb\nc\n" consist of 6 characters, and 3 of them are newline characters:

              a \n b \n c \n

1
On

By Default \n takes a new line no matter what you are storing, the interpreter understands this thing that you want to store some values in the next line. So, that's the way it printed like that.

1
On

Try this

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

The escape sequences do work. x is being printed as a tuple because it is a tuple. If you want to join its elements, use str.join(), or have print() join it for you.

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

>>>

Meanwhile, y is a string due to string literal concatenation

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

>>>