Unicode-Zeichenfolgenliterale
Unicode-Zeichenfolgenliterale (Zeichenfolgenliterale mit dem Präfix u
) sind nicht mehr verwendet in Python 3. Sie sind immer noch gültig, aber nur für Kompatibilitätszwecke mit Python 2.
Rohe String-Literale
Wenn Sie ein Zeichenfolgenliteral erstellen möchten, das nur aus leicht zu tippenden Zeichen wie englischen Buchstaben oder Zahlen besteht, können Sie diese einfach eingeben: 'hello world'
. Wenn Sie aber auch exotischere Zeichen einbeziehen wollen, müssen Sie eine Umgehung anwenden. Einer der Workarounds sind Fluchtsequenzen . Auf diese Weise können Sie zum Beispiel eine neue Zeile in Ihrer Zeichenkette einfach durch zwei leicht zu tippende Zeichen darstellen \n
zu Ihrem Zeichenfolgenliteral. Wenn Sie also die 'hello\nworld'
Zeichenfolge werden die Wörter in getrennten Zeilen gedruckt. Das ist sehr praktisch!
Andererseits gibt es Situationen, in denen Sie ein Zeichenkettenliteral erstellen möchten, das Escape-Sequenzen enthält, die aber nicht von Python interpretiert werden sollen. Sie wollen, dass sie als roh . Sehen Sie sich diese Beispiele an:
'New updates are ready in c:\windows\updates\new'
'In this lesson we will learn what the \n escape sequence does.'
In solchen Situationen können Sie dem Zeichenkettenliteral einfach das Präfix r
Zeichen wie dieses: r'hello\nworld'
und keine Escape-Sequenzen werden von Python interpretiert. Die Zeichenkette wird genau so gedruckt, wie Sie sie erstellt haben.
Rohe String-Literale sind nicht vollständig "roh"?
Viele Leute erwarten, dass die rohen String-Literale in dem Sinne roh sind, dass "Alles, was zwischen den Anführungszeichen steht, wird von Python ignoriert". . Das ist nicht wahr. Python erkennt nach wie vor alle Escape-Sequenzen, es interpretiert sie nur nicht - es lässt sie stattdessen unverändert. Das bedeutet, dass rohe String-Literale müssen weiterhin gültige String-Literale sein .
Von der lexikalische Definition eines String-Literales:
string ::= "'" stringitem* "'"
stringitem ::= stringchar | escapeseq
stringchar ::= <any source character except "\" or newline or the quote>
escapeseq ::= "\" <any source character>
Es ist klar, dass Zeichenkettenliterale (roh oder nicht) ein bloßes Anführungszeichen enthalten: 'hello'world'
oder mit einem Backslash endet: 'hello world\'
sind nicht gültig.