None en Binaire Gegevens
Veeg om het menu te tonen
Echte programma's verwerken ontbrekende waarden en binaire data. Gebruik None om "geen waarde" aan te geven, en bytes/bytearray voor ruwe binaire inhoud. Weet wanneer elk geschikt is en hoe je veilig converteert tussen tekst en bytes.
None voor "Geen Waarde"
None is een enkel object dat "niets hier" betekent.
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Gebruik is None in plaats van truthiness-controles, omdat 0 en "" ook als falsey worden beschouwd.
123value = 0 print(not value) # True print(value is None) # False
Standaardwaarden en terugvalopties
None wordt gebruikt als een duidelijke markering dat een waarde bewust ontbreekt. Hiermee kun je onderscheid maken tussen "geen waarde opgegeven" en geldige waarden zoals 0 of "", waardoor standaardwaarden en terugvalopties veiliger en voorspelbaarder worden.
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
Functies en parameters
Dit voorbeeld laat zien hoe een functie een parameter die is ingesteld op None gebruikt als signaal dat er geen tag is opgegeven. Hierdoor kan de functie een veilige standaardwaarde toewijzen, terwijl de aanroeper deze indien nodig kan overschrijven.
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
Binaire gegevens
str bevat tekst, bytes en bytearray bevatten ruwe bytewaarden.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Coderen en decoderen
Coderen zet tekst om in bytes zodat deze betrouwbaar kan worden opgeslagen of overgedragen, terwijl decoderen deze bytes weer omzet naar leesbare tekst. Het gebruik van een gedefinieerde codering zoals UTF-8 zorgt ervoor dat tekens correct behouden blijven.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Binaire gegevens in de praktijk
Gebruik bytes en bytearray voor het verwerken van ruwe binaire informatie. Deze types zijn essentieel voor taken waarbij gegevens niet alleen tekst zijn, zoals:
- Lezen en schrijven van bestanden in binaire modus (zoals afbeeldingen, audio of uitvoerbare bestanden);
- Verzenden en ontvangen van gegevens via netwerken, waarbij je exacte byte-sequenties moet overdragen;
- Ontleden of opbouwen van binaire protocollen, bijvoorbeeld bij communicatie met hardware of low-level API's.
bytes versus bytearray
bytes-objecten zijn onveranderlijk: je kunt de inhoud na creatie niet wijzigen. Gebruik deze wanneer je vaste binaire gegevens nodig hebt, zoals bestandsinhoud of cryptografische hashes;bytearray-objecten zijn veranderlijk: je kunt de inhoud ter plekke aanpassen. Dit is handig voor het opbouwen of bewerken van binaire gegevens voordat je ze opslaat of verzendt.
Voorbeeld: Binaire gegevens wijzigen
# 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')
Converteren tussen bytes en bytearray
- Converteer
bytesnaarbytearrayom wijzigingen mogelijk te maken:
b = b"data"
ba = bytearray(b)
- Converteer
bytearrayterug naarbytesvoor opslag of verzending:
ba = bytearray(b"abc")
b = bytes(ba)
Coderen en decoderen
- Gebruik
.encode()op een string om eenbytes-object te krijgen met een specifieke codering (zoals UTF-8); - Gebruik
.decode()op eenbytes- ofbytearray-object om een string te verkrijgen.
Dit is cruciaal bij het werken met bestands-I/O of netwerkgegevens, waar je vaak ruwe bytes ontvangt of verzendt en deze moet omzetten naar of vanuit leesbare tekst.
Typische gebruikssituaties
- Bestands-I/O:
- Open bestanden in binaire modus (
"rb"of"wb") om exacte bytes te lezen of te schrijven.
- Open bestanden in binaire modus (
- Netwerkgegevens:
- Socketcommunicatie verzendt en ontvangt gegevens als bytes.
- Binaire protocollen:
- Pakketten opbouwen of ontleden met
bytearrayvoor efficiënte bewerkingen ter plekke.
- Pakketten opbouwen of ontleden met
Inzicht in wanneer je welk type gebruikt, helpt bij het schrijven van robuuste code voor het verwerken van gegevens in de praktijk.
Typische gebruikssituaties voor Bytes en Bytearray
Je gebruikt bytes en bytearray wanneer je direct werkt met ruwe binaire gegevens in plaats van tekst. Deze types zijn essentieel in verschillende scenario's:
- Lezen of schrijven van binaire bestanden, zoals afbeeldingen, audio of uitvoerbare bestanden;
- Verwerken van netwerkgegevens, aangezien sockets bytes verzenden en ontvangen, geen strings;
- Werken met binaire protocollen, waarbij je berichten als byte-sequenties moet opbouwen of ontleden.
bytes is een onveranderlijke sequentie, wat betekent dat je de inhoud na creatie niet kunt wijzigen. Dit is ideaal wanneer je wilt garanderen dat de gegevens ongewijzigd blijven, bijvoorbeeld bij het lezen van een bestand of het ontvangen van een netwerkpakket.
bytearray is veranderlijk, dus je kunt de inhoud ter plekke aanpassen. Gebruik bytearray wanneer je een bericht moet opbouwen, delen van een buffer wilt wijzigen of efficiënt binaire gegevens wilt bewerken voordat je ze verzendt of opslaat.
Wanneer welk type gebruiken:
- Gebruik
bytesvoor vaste, alleen-lezen binaire gegevens, zoals bestandsinhoud of netwerkberichten die je niet hoeft te wijzigen; - Gebruik
bytearraywanneer je de binaire gegevens moet bewerken, aanvullen of anderszins aanpassen voordat je ze verder verwerkt of verzendt.
Converteren tussen bytes en bytearray
Je kunt eenvoudig converteren tussen bytes (onveranderlijk) en bytearray (veranderlijk) objecten in Python. Zo kies je het juiste type voor jouw situatie—bytes voor vaste gegevens, bytearray wanneer je de inhoud moet aanpassen.
- Gebruik de
bytes()constructor om eenbytearrayom te zetten naar een onveranderlijkbytes-object; - Gebruik de
bytearray()constructor om een veranderlijke kopie te maken van eenbytes-object.
Dit is handig wanneer je binaire gegevens wilt bewerken (met bytearray), en ze daarna wilt vastleggen (met bytes) voor veilige opslag of verzending.
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)
Na conversie naar bytes kun je de inhoud niet meer wijzigen. Gebruik bytearray wanneer je binaire gegevens wilt bewerken voordat je ze definitief als bytes opslaat.
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")
Lengteverschillen
Sommige tekens nemen één tekstelement in beslag maar meerdere bytes, waardoor hun lengte in str en in gecodeerde vorm kan verschillen. Dit komt doordat coderingen zoals UTF-8 meer dan één byte kunnen gebruiken om een enkel teken weer te geven.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Bestanden
Binaire bestanden moeten worden geopend in "rb"-modus zodat hun ruwe bytes exact zoals opgeslagen worden gelezen. Dit voorkomt dat Python probeert de data als tekst te interpreteren.
# with open("example.png", "rb") as f:
# blob = f.read()
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.