Warum backslashes doppelt angezeigt?
Wenn ich ein string mit backslashes, bekommen Sie dupliziert:
>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'
Warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich ein string mit backslashes, bekommen Sie dupliziert:
>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'
Warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie sehen, ist das Darstellung von
my_string
erstellt von seinen__repr__()
Methode. Wenn Sie es drucken, können Sie sehen, dass Sie tatsächlich bekommen habe einfache umgekehrte Schrägstriche, wie Sie soll:Die saite hat drei Charaktere, nicht vier:
Können Sie die standard-Darstellung einer Zeichenfolge (oder ein beliebiges anderes Objekt) mit dem
repr()
built-in-Funktion:Python stellt backslashes in strings als
\\
weil der backslash ist ein escape-Zeichen - zum Beispiel\n
steht ein newline, und\t
stellt einen tab.Dies kann manchmal in Schwierigkeiten:
Weil dieser, muss es eine Möglichkeit zu sagen, Python Sie wirklich wollen die beiden Charaktere
\n
anstatt ein Zeilenumbruch, und Sie tun, dass durch die Flucht der backslash selbst, mit anderen:Wenn Python gibt die Darstellung einer Zeichenfolge, spielt es sicher, auf der Flucht alle backslashes (auch wenn Sie sonst nicht Teil einer escape-Sequenz), und das ist, was Sie sehen. Aber die Zeichenfolge selbst enthält nur einzelne backslashes.
Mehr Informationen über Python string-Literale können an gefunden werden: String-und Byte-Literale in der Python-Dokumentation.
Als Null Piräus Antwort erklärt, mit einzelnen backslashes, wie hier (außerhalb von raw-string-Literale) ist eine schlechte Idee.
Aber es gibt ein weiteres problem: in der Zukunft wird es sein, einen Fehler zu verwenden, eine Undefinierte escape-Sequenz wie
\d
, anstatt die Bedeutung einer literalen backslash gefolgt von einemd
. Also, anstatt nur immer Glück, dass Ihr string geschah zu verwenden\d
statt\t
so war es was Sie wollte wohl, wird es definitiv nicht tun, was Sie wollen.Als der 3.6 er schon wirft eine
DeprecationWarning
, obwohl die meisten Menschen sehen nicht die. Es wird einSyntaxError
in einer zukünftigen version.In vielen anderen Sprachen, darunter C, mit einem backslash, der nicht von Beginn einer escape-Sequenz bedeutet der backslash wird ignoriert.
In ein paar Sprachen, darunter Python, ein backslash, der nicht von Beginn einer escape-Sequenz ist ein literal backslash.
In einigen Sprachen, um Verwirrung zu vermeiden, ob die Sprache ist C-ähnlich oder Python-like, und zu vermeiden das problem mit
\Foo
arbeiten, aber\foo
nicht funktioniert, ein backslash, der nicht von Beginn einer escape-Sequenz ist illegal.