In einem Python-Quellcode, auf den ich gestoßen bin, habe ich ein kleines b vor einem String wie in gesehen:
b"abcdef"
Ich kenne das u
Präfix, das eine Unicode-Zeichenfolge kennzeichnet, und das r
Präfix für ein Raw-Zeichenfolgenliteral.
Wofür steht das b
und in welcher Art von Quellcode ist es nützlich, da es genau wie eine einfache Zeichenfolge ohne Präfix zu sein scheint?
python
syntax
python-3.x
byte
kriss
quelle
quelle
Antworten:
Dies ist das Python3-
bytes
Literal . Dieses Präfix fehlt in Python 2.5 und älter (es entspricht einer einfachen Zeichenfolge von 2.x, während eine einfache Zeichenfolge von 3.x einem Literal mit einemu
Präfix in 2.x entspricht). In Python 2.6+ entspricht es aus Gründen der Kompatibilität mit 3.x einer einfachen Zeichenfolge .quelle
Das
b
Präfix kennzeichnet einbytes
Zeichenfolgenliteral .Wenn Sie sehen, dass es im Python 3-Quellcode verwendet wird, erstellt der Ausdruck ein
bytes
Objekt , kein reguläres Unicode-str
Objekt . Wenn Sie sehen, dass es in Ihrer Python-Shell oder als Teil einer Liste, eines Diktats oder eines anderen Containerinhalts wiedergegeben wird, sehen Sie einbytes
Objekt, das mit dieser Notation dargestellt wird.bytes
Objekte enthalten grundsätzlich eine Folge von Ganzzahlen im Bereich von 0 bis 255, aber wenn sie dargestellt werden, zeigt Python diese Bytes als ASCII-Codepunkte an, um das Lesen ihres Inhalts zu erleichtern. Jegliche Bytes außerhalb des druckbaren Bereichs von ASCII - Zeichen sind als Escape - Sequenzen gezeigt (zB\n
,\x82
usw.). Umgekehrt können Sie sowohl ASCII-Zeichen als auch Escape-Sequenzen verwenden, um Bytewerte zu definieren. für ASCII-Werte wird deren numerischer Wert verwendet (zBb'A'
==b'\x41'
)Da ein
bytes
Objekt aus einer Folge von Ganzzahlen besteht, können Sie einbytes
Objekt aus einer beliebigen anderen Folge von Ganzzahlen mit Werten im Bereich von 0 bis 255 erstellen, z. B. eine Liste:und Indizierung gibt Ihnen die ganzen Zahlen zurück (aber Slicing erzeugt einen neuen
bytes
Wert, für das obige Beispiel,value[0]
gibt Ihnen72
abervalue[:1]
istb'H'
als 72 der ASCII - Code Punkt für den Großbuchstaben ist H ).bytes
modellieren Binärdaten , einschließlich codierter Text . Wenn Ihrbytes
Wert Text enthält, müssen Sie ihn zuerst mit dem richtigen Codec dekodieren. Wenn die Daten beispielsweise als UTF-8 codiert sind, können Sie einen Unicode-str
Wert erhalten mit:Um umgekehrt von Text in einem
str
Objekt zu einem zubytes
wechseln, müssen Sie codieren . Sie müssen sich für eine zu verwendende Codierung entscheiden. Standardmäßig wird UTF-8 verwendet. Was Sie jedoch benötigen, hängt stark von Ihrem Anwendungsfall ab:Sie können auch den Konstruktor verwenden,
bytes(strvalue, encoding)
um dasselbe zu tun.Sowohl die Dekodierungs- als auch die Kodierungsmethode benötigen ein zusätzliches Argument, um anzugeben, wie Fehler behandelt werden sollen .
Python 2, Versionen 2.6 und 2.7, unterstützt auch das Erstellen von String-Literalen mithilfe der
b'..'
String-Literal-Syntax, um Code zu vereinfachen, der sowohl in Python 2 als auch in Python 3 funktioniert.bytes
Objekte sind unveränderlich, genau wiestr
Strings. Verwenden Sie einbytearray()
Objekt, wenn Sie einen veränderlichen Bytewert benötigen.quelle