literal - raw string python 3
¿Por qué las barras diagonales aparecen dos veces? (1)
Cuando creo una cadena que contiene barras diagonales inversas, se duplican:
>>> my_string = "why/does/it/happen?"
>>> my_string
''why//does//it//happen?''
¿Por qué?
Lo que está viendo es la representación de my_string creada por su __repr__() . Si lo imprime, puede ver que en realidad tiene barras invertidas simples, tal como lo desea:
>>> print(my_string)
why/does/it/happen?
El siguiente string tiene tres caracteres, no cuatro:
>>> ''a//b''
''a//b''
>>> len(''a//b'')
3
Puede obtener la representación estándar de una cadena (o cualquier otro objeto) con la función incorporada repr() :
>>> print(repr(my_string))
''why//does//it//happen?''
Python representa las barras diagonales inversas en cadenas como // porque la barra diagonal inversa es un carácter de escape; por ejemplo, /n representa una nueva línea y /t representa una pestaña.
Esto a veces puede meterlo en problemas:
>>> print("this/text/is/not/what/it/seems")
this ext/is
ot/what/it/seems
Debido a esto, debe haber una manera de decirle a Python que realmente desea los dos caracteres /n lugar de una línea nueva, y lo hace escapando de la barra invertida misma, con otra:
>>> print("this//text/is/what/you//need")
this/text/is/what/you/need
Cuando Python devuelve la representación de una cadena, se reproduce de forma segura, escapando de todas las barras invertidas (incluso si no formaran parte de una secuencia de escape), y eso es lo que está viendo. Sin embargo, la cadena en sí contiene solo barras invertidas simples.
Se puede encontrar más información sobre los literales de cadenas de Python en: literales de cadenas y bytes en la documentación de Python.