2014-06-06 19 views

risposta

42

Quello che state vedendo è la rappresentazione di my_string creato da suo metodo __repr__(). Se si stampa, si può vedere che hai effettivamente ottenuto rovesciare singolo, proprio come desiderato:

>>> print(my_string) 
why\does\it\happen? 

è possibile ottenere la rappresentazione standard di una stringa (o qualsiasi altro oggetto) con la repr() incorporato funzione:

>>> print(repr(my_string)) 
'why\\does\\it\\happen?' 

pitone rappresenta barre rovesciate in stringhe come \\ perché la barra rovesciata è un carattere di escape - per esempio, \n rappresenta una nuova riga, e \t rappresenta una scheda.

Questo può a volte si ottiene nei guai:

>>> print("this\text\is\not\what\it\seems") 
this ext\is 
ot\what\it\seems 

A causa di questo, ci deve essere un modo per dire Python si davvero desidera che i due personaggi \n piuttosto che un ritorno a capo, e lo fai fuggendo il backslash stesso, con un altro:

>>> print("this\\text\is\what\you\\need") 
this\text\is\what\you\need 

Quando Python restituisce la rappresentazione di una stringa, gioca sicuro, in fuga tutti i backslash (anche se non sarebbero altrimenti essere parte di un es sequenza di capo), ed è quello che stai vedendo. Tuttavia, la stringa stessa contiene solo barre retroverse.

Ulteriori informazioni sui valori letterali delle stringhe di Python sono disponibili all'indirizzo: String and Bytes literals nella documentazione di Python.

+2

Ho cercato di mantenere questa risposta focalizzata specificamente sull'incomprensione "double backslash", ma è anche utile conoscere [liter string stringhe] (http://stackoverflow.com/questions/2081640). –

Problemi correlati