None- und Binärdaten
Reale Programme verarbeiten fehlende Werte und Rohdaten aus Dateien oder Netzwerken. Verwenden Sie None, um "kein Wert" darzustellen, und bytes oder bytearray für Binärdaten. Dieses Kapitel zeigt, wann welches verwendet wird und wie der sichere Wechsel zwischen Text und Bytes erfolgt.
None für "Kein Wert"
None ist ein einzelnes spezielles Objekt, das "nichts vorhanden" bedeutet.
12345678910111213# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
None ist ein sogenannter "falsey" Wert, aber auch 0 und "" sind falsey. Verwenden Sie bevorzugt is None, wenn tatsächlich "fehlend" gemeint ist.
123value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
Standardwerte und Rückfalloptionen
1234567891011x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
Funktionen und Parameter
12345678910111213def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
bytes und bytearray für Binärdaten
Text verwendet str und enthält Unicode-Zeichen. Binärdaten verwenden bytes oder bytearray und enthalten rohe Byte-Werte von 0-255.
123456789# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
Umwandlung von Text und Bytes: Encode und Decode
1234567text = "café" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # café <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # café <class 'str'>
Mischen von Text und Bytes – Ungültig ohne Konvertierung
123456789# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
Längen können unterschiedlich sein
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Dateien
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Welche Prüfung erkennt einen fehlenden Wert korrekt?
2. Welche Zeile kombiniert Text korrekt mit einem Bytes-Präfix?
3. Welche Aussage ist korrekt?
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
Can you explain when to use `None` versus other falsey values?
How do I safely provide default values for function parameters?
What are the main differences between `bytes` and `bytearray`?
Awesome!
Completion rate improved to 5
None- und Binärdaten
Swipe um das Menü anzuzeigen
Reale Programme verarbeiten fehlende Werte und Rohdaten aus Dateien oder Netzwerken. Verwenden Sie None, um "kein Wert" darzustellen, und bytes oder bytearray für Binärdaten. Dieses Kapitel zeigt, wann welches verwendet wird und wie der sichere Wechsel zwischen Text und Bytes erfolgt.
None für "Kein Wert"
None ist ein einzelnes spezielles Objekt, das "nichts vorhanden" bedeutet.
12345678910111213# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
None ist ein sogenannter "falsey" Wert, aber auch 0 und "" sind falsey. Verwenden Sie bevorzugt is None, wenn tatsächlich "fehlend" gemeint ist.
123value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
Standardwerte und Rückfalloptionen
1234567891011x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
Funktionen und Parameter
12345678910111213def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
bytes und bytearray für Binärdaten
Text verwendet str und enthält Unicode-Zeichen. Binärdaten verwenden bytes oder bytearray und enthalten rohe Byte-Werte von 0-255.
123456789# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
Umwandlung von Text und Bytes: Encode und Decode
1234567text = "café" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # café <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # café <class 'str'>
Mischen von Text und Bytes – Ungültig ohne Konvertierung
123456789# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
Längen können unterschiedlich sein
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Dateien
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Welche Prüfung erkennt einen fehlenden Wert korrekt?
2. Welche Zeile kombiniert Text korrekt mit einem Bytes-Präfix?
3. Welche Aussage ist korrekt?
Danke für Ihr Feedback!