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.