826 Stimmen

Was genau bewirken die Zeichenfolgenpräfixe "u" und "r", und was sind rohe Zeichenfolgenliterale?

Bei der Frage diese Frage wurde mir klar, dass ich nicht viel über rohe Saiten wusste. Für jemanden, der behauptet, ein Django-Trainer zu sein, ist das echt ätzend.

Ich weiß, was eine Kodierung ist, und ich weiß, was u'' allein tut, da ich bekomme, was Unicode ist.

  • Aber was bedeutet r'' genau tun? Welche Art von Zeichenfolge ergibt sich daraus?

  • Und vor allem: Was zum Teufel bedeutet ur'' tun?

  • Schließlich gibt es eine zuverlässige Möglichkeit, von einer Unicode-Zeichenfolge zu einer einfachen Rohzeichenfolge zurückzukehren?

  • Ach, und übrigens, wenn Ihr System und Ihr Texteditor auf UTF-8 eingestellt sind, hat u'' tatsächlich etwas tun?

16voto

Jeyekomon Punkte 2288

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.

6voto

Bomba Ps Punkte 89

Vielleicht ist das offensichtlich, vielleicht auch nicht, aber Sie können die Zeichenfolge '\' durch den Aufruf x=chr(92)

x=chr(92)
print type(x), len(x) # <type 'str'> 1
y='\\'
print type(y), len(y) # <type 'str'> 1
x==y   # True
x is y # False

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X