Quando creo una stringa contenente le barre rovesciate, ottengono duplicati:Perché i backslash compaiono due volte?
>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'
Perché?
Quando creo una stringa contenente le barre rovesciate, ottengono duplicati:Perché i backslash compaiono due volte?
>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'
Perché?
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.
Ho cercato di mantenere questa risposta focalizzata specificamente sull'incomprensione "double backslash", ma è anche utile conoscere [liter string stringhe] (http://stackoverflow.com/questions/2081640). –