raw literal escape characters python string escaping backslash repr

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.