2016-06-26 24 views
0

Ich bin nicht in der Lage die folgenden Ergebnisse zu verstehen:wie Schrägstriche in Python arbeiten

>>> a='\' 
    File "<stdin>", line 1 
    a='\' 
     ^
SyntaxError: EOL while scanning string literal 


>>> a=r'\' 
    File "<stdin>", line 1 
    a=r'\' 
     ^
SyntaxError: EOL while scanning string literal 

ich verstanden, dass das Präfix ‚r‘ wird die Zeichenfolge roh machen und \ würde als normales Zeichen behandelt werden, weil r'\n' sind zwei Zeichen und ich habe gerade ein Zeichen daraus entfernt.

>>> a='\\' 
>>> a 
'\\' 
>>> print a 
\ 
>>> repr(a) 
"'\\\\'" 

Mein Verständnis: a='\\' Ergebnisse in einer Zeichenkette, die tatsächlich ein einziges \ enthält, während die andere nur verwendet wird, um es zu entkommen. Kann nicht verstehen, warum repr(a) zu vielen Backslashes führt.

>>> a=r'\\' 
>>> a 
'\\\\' 
>>> print a 
\\ 
>>> repr(a) 
"'\\\\\\\\'" 

Mein Verständnis: a=r'\\' ist ein String mit zwei tatsächlichen \ s und von denen jede mit einem \ Präfix wird es als Python-String zu repräsentieren. Kann nicht verstehen, warum einfach schreiben a auf Interpreter gibt 4 \ s zurück und repr(a) gibt 8 \ s zurück.

Antwort

1
SyntaxError: EOL while scanning string literal 

Die Handhabung für ein Raw-String durchgeführt wird, nachdem die Zeichenfolge gelext wird. Da '\' nicht gültig lexiert werden kann, kann es nicht als Teil einer Raw-Zeichenfolge verwendet werden.

>>> repr(a) 

repr() Doppelschrägstriche in der Zeichenkette, die es zurückgibt. Da Sie nun die Repräsentation einer Repräsentation anzeigen, werden die Backslashes vervierfacht.

0

Sie haben Recht. Präfix 'r' wird die Zeichenfolge roh machen. Aber '\' ist die einzige Ausnahme.

repr 'Gibt die kanonische Zeichenfolgendarstellung des Objekts zurück.'