None- und Binärdaten
Swipe um das Menü anzuzeigen
Reale Programme verarbeiten fehlende Werte und Binärdaten. None kennzeichnet "kein Wert", und bytes/bytearray dienen für rohe Binärinhalte. Verständnis, wann welches verwendet wird, sowie sichere Umwandlung zwischen Text und Bytes ist wichtig.
None für "Kein Wert"
None ist ein einzelnes Objekt, das "nichts vorhanden" bedeutet.
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Verwendung von is None anstelle von Wahrheitswert-Prüfungen, da auch 0 und "" als falsey gelten.
123value = 0 print(not value) # True print(value is None) # False
Standardwerte und Rückfalloptionen
None wird als eindeutiger Marker verwendet, dass ein Wert absichtlich fehlt. Dadurch lässt sich zwischen „kein Wert angegeben“ und gültigen Werten wie 0 oder "" unterscheiden, was Standardwerte und Rückfalloptionen sicherer und vorhersehbarer macht.
1234567x = None print(x or "unknown") # 'unknown' print("unknown" if x is None else x) x = 0 print(x or "unknown") # 'unknown' print("unknown" if x is None else x) # 0
Funktionen und Parameter
Dieses Beispiel zeigt, wie eine Funktion einen auf None gesetzten Parameter als Signal verwendet, dass kein Tag angegeben wurde. Dadurch kann die Funktion einen sicheren Standardwert zuweisen, während der Aufrufer ihn bei Bedarf überschreiben kann.
1234567def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" print(add_tag("hello")) # [general] hello print(add_tag("hello", "news")) # [news] hello
Binärdaten
str enthält Text, bytes und bytearray enthalten rohe Bytewerte.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Kodierung und Dekodierung
Kodierung wandelt Text in Bytes um, damit er zuverlässig gespeichert oder übertragen werden kann, während Dekodierung diese Bytes wieder in lesbaren Text zurückverwandelt. Die Verwendung einer definierten Kodierung wie UTF-8 stellt sicher, dass Zeichen korrekt erhalten bleiben.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Binärdaten in der Praxis
Verwendung von bytes und bytearray zur Verarbeitung von rohen Binärinformationen. Diese Typen sind unerlässlich für Aufgaben, bei denen es sich nicht nur um Textdaten handelt, wie zum Beispiel:
- Lesen und Schreiben von Dateien im Binärmodus (wie Bilder, Audiodateien oder ausführbare Dateien);
- Senden und Empfangen von Daten über Netzwerke, bei denen exakte Bytesequenzen übertragen werden müssen;
- Parsen oder Erstellen von Binärprotokollen, beispielsweise bei der Kommunikation mit Hardware oder Low-Level-APIs.
bytes vs bytearray
bytes-Objekte sind unveränderlich: Ihr Inhalt kann nach der Erstellung nicht mehr geändert werden. Verwendung bei festen Binärdaten, wie Dateiinhalten oder kryptografischen Hashes;bytearray-Objekte sind veränderlich: Ihr Inhalt kann direkt geändert werden. Nützlich zum Erstellen oder Bearbeiten von Binärdaten vor dem Speichern oder Senden.
Beispiel: Bearbeiten von Binärdaten
# Create a bytes object (immutable)
data = b"hello"
# Create a mutable copy
data_mutable = bytearray(data)
data_mutable[0] = 72 # Change 'h' (104) to 'H' (72)
print(data_mutable) # bytearray(b'Hello')
Umwandlung zwischen bytes und bytearray
- Umwandlung von
byteszubytearray, um Änderungen zu ermöglichen:
b = b"data"
ba = bytearray(b)
- Umwandlung von
bytearrayzurück zubytesfür Speicherung oder Übertragung:
ba = bytearray(b"abc")
b = bytes(ba)
Kodierung und Dekodierung
- Verwendung von
.encode()bei einem String, um einbytes-Objekt mit einer bestimmten Kodierung (z. B. UTF-8) zu erhalten; - Verwendung von
.decode()bei einembytes- oderbytearray-Objekt, um einen String zu erhalten.
Dies ist entscheidend bei Datei-I/O oder Netzwerkdaten, bei denen häufig rohe Bytes empfangen oder gesendet und in lesbaren Text umgewandelt werden müssen.
Typische Anwendungsfälle
- Datei-I/O:
- Öffnen von Dateien im Binärmodus (
"rb"oder"wb"), um exakte Bytes zu lesen oder zu schreiben.
- Öffnen von Dateien im Binärmodus (
- Netzwerkdaten:
- Socket-Kommunikation sendet und empfängt Daten als Bytes.
- Binärprotokolle:
- Erstellen oder Parsen von Paketen mit
bytearrayfür effiziente Änderungen direkt im Speicher.
- Erstellen oder Parsen von Paketen mit
Das Verständnis, wann welcher Typ verwendet werden sollte, hilft beim Schreiben robuster Programme für die Verarbeitung realer Daten.
Typische Anwendungsfälle für Bytes und Bytearray
bytes und bytearray werden verwendet, wenn direkt mit rohen Binärdaten gearbeitet wird, anstatt mit Text. Diese Typen sind in verschiedenen Szenarien unerlässlich:
- Lesen oder Schreiben von Binärdateien wie Bildern, Audiodateien oder ausführbaren Dateien;
- Verarbeitung von Netzwerkdaten, da Sockets Bytes und keine Strings senden und empfangen;
- Interaktion mit Binärprotokollen, bei denen Nachrichten als Bytesequenzen erstellt oder geparst werden müssen.
bytes ist eine unveränderliche Sequenz, d. h. der Inhalt kann nach der Erstellung nicht mehr geändert werden. Dies ist ideal, wenn sichergestellt werden muss, dass die Daten unverändert bleiben, z. B. beim Lesen einer Datei oder beim Empfangen eines Netzwerkpakets.
bytearray ist veränderlich, sodass der Inhalt direkt geändert werden kann. bytearray wird verwendet, wenn eine Nachricht aufgebaut, Teile eines Puffers verändert oder Binärdaten effizient vor dem Senden oder Speichern bearbeitet werden sollen.
Wann welcher Typ verwendet wird:
bytesfür feste, schreibgeschützte Binärdaten, wie Dateiinhalte oder Netzwerkpakete, die nicht verändert werden müssen;bytearray, wenn Binärdaten bearbeitet, erweitert oder vor der weiteren Verarbeitung oder Übertragung verändert werden sollen.
Umwandlung zwischen bytes und bytearray
In Python kann einfach zwischen bytes (unveränderlich) und bytearray (veränderlich) umgewandelt werden. So kann je nach Bedarf der passende Typ gewählt werden—bytes für feste Daten, bytearray wenn der Inhalt bearbeitet werden muss.
- Mit dem Konstruktor
bytes()wird einbytearrayin ein unveränderlichesbytes-Objekt umgewandelt; - Mit dem Konstruktor
bytearray()wird aus einembytes-Objekt eine veränderliche Kopie erstellt.
Dies ist nützlich, wenn Binärdaten bearbeitet werden müssen (mit bytearray), bevor sie zur sicheren Speicherung oder Übertragung in bytes umgewandelt werden.
raw = bytearray(b"data")
raw[0] = 68 # Change first byte to 'D'
locked = bytes(raw) # Convert to immutable bytes
b = b"example"
mutable = bytearray(b) # Convert to mutable bytearray
mutable.append(33) # Add '!' (ASCII 33)
Nach der Umwandlung in bytes kann der Inhalt nicht mehr geändert werden. bytearray wird verwendet, wenn Binärdaten vor der endgültigen Umwandlung in bytes bearbeitet werden müssen.
1234567891011# Convert bytes to bytearray b = b"hello" ba = bytearray(b) # Modify the bytearray (change 'h' to 'H') ba[0] = ord('H') print(ba) # bytearray(b'Hello') # Convert bytearray back to bytes b2 = bytes(ba) print(b2) # b'Hello'
123456try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")
Längenunterschiede
Einige Zeichen benötigen ein Textelement, aber mehrere Bytes, sodass sich ihre Länge in str und in kodierter Form unterscheiden kann. Dies tritt auf, weil Kodierungen wie UTF-8 mehr als ein Byte verwenden können, um ein einzelnes Zeichen darzustellen.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Dateien
Binärdateien müssen im Modus "rb" geöffnet werden, damit ihre Rohbytes exakt wie gespeichert gelesen werden. Dies verhindert, dass Python versucht, die Daten als Text zu interpretieren.
# with open("example.png", "rb") as f:
# blob = f.read()
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
None- und Binärdaten
Reale Programme verarbeiten fehlende Werte und Binärdaten. None kennzeichnet "kein Wert", und bytes/bytearray dienen für rohe Binärinhalte. Verständnis, wann welches verwendet wird, sowie sichere Umwandlung zwischen Text und Bytes ist wichtig.
None für "Kein Wert"
None ist ein einzelnes Objekt, das "nichts vorhanden" bedeutet.
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Verwendung von is None anstelle von Wahrheitswert-Prüfungen, da auch 0 und "" als falsey gelten.
123value = 0 print(not value) # True print(value is None) # False
Standardwerte und Rückfalloptionen
None wird als eindeutiger Marker verwendet, dass ein Wert absichtlich fehlt. Dadurch lässt sich zwischen „kein Wert angegeben“ und gültigen Werten wie 0 oder "" unterscheiden, was Standardwerte und Rückfalloptionen sicherer und vorhersehbarer macht.
1234567x = None print(x or "unknown") # 'unknown' print("unknown" if x is None else x) x = 0 print(x or "unknown") # 'unknown' print("unknown" if x is None else x) # 0
Funktionen und Parameter
Dieses Beispiel zeigt, wie eine Funktion einen auf None gesetzten Parameter als Signal verwendet, dass kein Tag angegeben wurde. Dadurch kann die Funktion einen sicheren Standardwert zuweisen, während der Aufrufer ihn bei Bedarf überschreiben kann.
1234567def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" print(add_tag("hello")) # [general] hello print(add_tag("hello", "news")) # [news] hello
Binärdaten
str enthält Text, bytes und bytearray enthalten rohe Bytewerte.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Kodierung und Dekodierung
Kodierung wandelt Text in Bytes um, damit er zuverlässig gespeichert oder übertragen werden kann, während Dekodierung diese Bytes wieder in lesbaren Text zurückverwandelt. Die Verwendung einer definierten Kodierung wie UTF-8 stellt sicher, dass Zeichen korrekt erhalten bleiben.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Binärdaten in der Praxis
Verwendung von bytes und bytearray zur Verarbeitung von rohen Binärinformationen. Diese Typen sind unerlässlich für Aufgaben, bei denen es sich nicht nur um Textdaten handelt, wie zum Beispiel:
- Lesen und Schreiben von Dateien im Binärmodus (wie Bilder, Audiodateien oder ausführbare Dateien);
- Senden und Empfangen von Daten über Netzwerke, bei denen exakte Bytesequenzen übertragen werden müssen;
- Parsen oder Erstellen von Binärprotokollen, beispielsweise bei der Kommunikation mit Hardware oder Low-Level-APIs.
bytes vs bytearray
bytes-Objekte sind unveränderlich: Ihr Inhalt kann nach der Erstellung nicht mehr geändert werden. Verwendung bei festen Binärdaten, wie Dateiinhalten oder kryptografischen Hashes;bytearray-Objekte sind veränderlich: Ihr Inhalt kann direkt geändert werden. Nützlich zum Erstellen oder Bearbeiten von Binärdaten vor dem Speichern oder Senden.
Beispiel: Bearbeiten von Binärdaten
# Create a bytes object (immutable)
data = b"hello"
# Create a mutable copy
data_mutable = bytearray(data)
data_mutable[0] = 72 # Change 'h' (104) to 'H' (72)
print(data_mutable) # bytearray(b'Hello')
Umwandlung zwischen bytes und bytearray
- Umwandlung von
byteszubytearray, um Änderungen zu ermöglichen:
b = b"data"
ba = bytearray(b)
- Umwandlung von
bytearrayzurück zubytesfür Speicherung oder Übertragung:
ba = bytearray(b"abc")
b = bytes(ba)
Kodierung und Dekodierung
- Verwendung von
.encode()bei einem String, um einbytes-Objekt mit einer bestimmten Kodierung (z. B. UTF-8) zu erhalten; - Verwendung von
.decode()bei einembytes- oderbytearray-Objekt, um einen String zu erhalten.
Dies ist entscheidend bei Datei-I/O oder Netzwerkdaten, bei denen häufig rohe Bytes empfangen oder gesendet und in lesbaren Text umgewandelt werden müssen.
Typische Anwendungsfälle
- Datei-I/O:
- Öffnen von Dateien im Binärmodus (
"rb"oder"wb"), um exakte Bytes zu lesen oder zu schreiben.
- Öffnen von Dateien im Binärmodus (
- Netzwerkdaten:
- Socket-Kommunikation sendet und empfängt Daten als Bytes.
- Binärprotokolle:
- Erstellen oder Parsen von Paketen mit
bytearrayfür effiziente Änderungen direkt im Speicher.
- Erstellen oder Parsen von Paketen mit
Das Verständnis, wann welcher Typ verwendet werden sollte, hilft beim Schreiben robuster Programme für die Verarbeitung realer Daten.
Typische Anwendungsfälle für Bytes und Bytearray
bytes und bytearray werden verwendet, wenn direkt mit rohen Binärdaten gearbeitet wird, anstatt mit Text. Diese Typen sind in verschiedenen Szenarien unerlässlich:
- Lesen oder Schreiben von Binärdateien wie Bildern, Audiodateien oder ausführbaren Dateien;
- Verarbeitung von Netzwerkdaten, da Sockets Bytes und keine Strings senden und empfangen;
- Interaktion mit Binärprotokollen, bei denen Nachrichten als Bytesequenzen erstellt oder geparst werden müssen.
bytes ist eine unveränderliche Sequenz, d. h. der Inhalt kann nach der Erstellung nicht mehr geändert werden. Dies ist ideal, wenn sichergestellt werden muss, dass die Daten unverändert bleiben, z. B. beim Lesen einer Datei oder beim Empfangen eines Netzwerkpakets.
bytearray ist veränderlich, sodass der Inhalt direkt geändert werden kann. bytearray wird verwendet, wenn eine Nachricht aufgebaut, Teile eines Puffers verändert oder Binärdaten effizient vor dem Senden oder Speichern bearbeitet werden sollen.
Wann welcher Typ verwendet wird:
bytesfür feste, schreibgeschützte Binärdaten, wie Dateiinhalte oder Netzwerkpakete, die nicht verändert werden müssen;bytearray, wenn Binärdaten bearbeitet, erweitert oder vor der weiteren Verarbeitung oder Übertragung verändert werden sollen.
Umwandlung zwischen bytes und bytearray
In Python kann einfach zwischen bytes (unveränderlich) und bytearray (veränderlich) umgewandelt werden. So kann je nach Bedarf der passende Typ gewählt werden—bytes für feste Daten, bytearray wenn der Inhalt bearbeitet werden muss.
- Mit dem Konstruktor
bytes()wird einbytearrayin ein unveränderlichesbytes-Objekt umgewandelt; - Mit dem Konstruktor
bytearray()wird aus einembytes-Objekt eine veränderliche Kopie erstellt.
Dies ist nützlich, wenn Binärdaten bearbeitet werden müssen (mit bytearray), bevor sie zur sicheren Speicherung oder Übertragung in bytes umgewandelt werden.
raw = bytearray(b"data")
raw[0] = 68 # Change first byte to 'D'
locked = bytes(raw) # Convert to immutable bytes
b = b"example"
mutable = bytearray(b) # Convert to mutable bytearray
mutable.append(33) # Add '!' (ASCII 33)
Nach der Umwandlung in bytes kann der Inhalt nicht mehr geändert werden. bytearray wird verwendet, wenn Binärdaten vor der endgültigen Umwandlung in bytes bearbeitet werden müssen.
1234567891011# Convert bytes to bytearray b = b"hello" ba = bytearray(b) # Modify the bytearray (change 'h' to 'H') ba[0] = ord('H') print(ba) # bytearray(b'Hello') # Convert bytearray back to bytes b2 = bytes(ba) print(b2) # b'Hello'
123456try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")
Längenunterschiede
Einige Zeichen benötigen ein Textelement, aber mehrere Bytes, sodass sich ihre Länge in str und in kodierter Form unterscheiden kann. Dies tritt auf, weil Kodierungen wie UTF-8 mehr als ein Byte verwenden können, um ein einzelnes Zeichen darzustellen.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Dateien
Binärdateien müssen im Modus "rb" geöffnet werden, damit ihre Rohbytes exakt wie gespeichert gelesen werden. Dies verhindert, dass Python versucht, die Daten als Text zu interpretieren.
# with open("example.png", "rb") as f:
# blob = f.read()
Danke für Ihr Feedback!