None og Binære Data
Sveip for å vise menyen
Reelle programmer håndterer manglende verdier og binærdata. Bruk None for å markere "ingen verdi", og bytes/bytearray for rå binært innhold. Kjenn til når hver type er passende, og hvordan du trygt konverterer mellom tekst og bytes.
None for "Ingen verdi"
None er et enkelt objekt som betyr "ingenting her".
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Bruk is None i stedet for sannhetsverdisjekker, siden 0 og "" også regnes som falske.
123value = 0 print(not value) # True print(value is None) # False
Standardverdier og reserveverdier
None brukes som en tydelig markør for at en verdi bevisst mangler. Dette gjør det mulig å skille mellom "ingen verdi oppgitt" og gyldige verdier som 0 eller "", noe som gjør standardverdier og reserveverdier tryggere og mer forutsigbare.
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
Funksjoner og parametere
Dette eksemplet viser hvordan en funksjon bruker en parameter satt til None som et signal om at ingen tag ble oppgitt. Det gjør at funksjonen kan tildele en trygg standardverdi, samtidig som den lar den som kaller funksjonen overstyre den ved behov.
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ære data
str inneholder tekst, bytes og bytearray inneholder rå byte-verdier.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Koding og dekoding
Koding konverterer tekst til bytes slik at den kan lagres eller overføres pålitelig, mens dekoding gjenoppretter disse bytes tilbake til lesbar tekst. Ved å bruke en definert koding som UTF-8 sikres det at tegnene bevares korrekt.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Binærdata i praksis
Bruk bytes og bytearray for å håndtere rå binærinformasjon. Disse typene er essensielle for oppgaver hvor data ikke bare er tekst, for eksempel:
- Lesing og skriving av filer i binærmodus (som bilder, lyd eller kjørbare filer);
- Sending og mottak av data over nettverk, hvor du må overføre nøyaktige bytesekvenser;
- Parsing eller konstruksjon av binære protokoller, for eksempel ved kommunikasjon med maskinvare eller lavnivå-API-er.
bytes vs bytearray
bytes-objekter er uforanderlige: du kan ikke endre innholdet etter opprettelse. Bruk disse når du trenger faste binærdata, som filinnhold eller kryptografiske hasher;bytearray-objekter er foranderlige: du kan endre innholdet direkte. Dette er nyttig for å bygge eller redigere binærdata før lagring eller sending.
Eksempel: Endre binærdata
# 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')
Konvertering mellom bytes og bytearray
- Konverter
bytestilbytearrayfor å kunne gjøre endringer:
b = b"data"
ba = bytearray(b)
- Konverter
bytearraytilbake tilbytesfor lagring eller overføring:
ba = bytearray(b"abc")
b = bytes(ba)
Koding og dekoding
- Bruk
.encode()på en streng for å få etbytes-objekt med en spesifikk koding (som UTF-8); - Bruk
.decode()på etbytes- ellerbytearray-objekt for å få en streng.
Dette er avgjørende ved arbeid med fil-I/O eller nettverksdata, hvor du ofte mottar eller sender rå bytes og må konvertere dem til eller fra lesbar tekst.
Typiske bruksområder
- Fil-I/O:
- Åpne filer i binærmodus (
"rb"eller"wb") for å lese eller skrive nøyaktige bytes.
- Åpne filer i binærmodus (
- Nettverksdata:
- Socket-kommunikasjon sender og mottar data som bytes.
- Binære protokoller:
- Bygg eller parse pakker ved å bruke
bytearrayfor effektiv redigering direkte i minnet.
- Bygg eller parse pakker ved å bruke
Å forstå når du skal bruke hver type hjelper deg å skrive robust kode for håndtering av data i praksis.
Typiske bruksområder for bytes og bytearray
Du bruker bytes og bytearray når du arbeider direkte med rå binærdata, i stedet for tekst. Disse typene er nødvendige i flere situasjoner:
- Lesing eller skriving av binærfiler, som bilder, lyd eller kjørbare filer;
- Håndtering av nettverksdata, siden sockets sender og mottar bytes, ikke strenger;
- Samhandling med binære protokoller, hvor du må konstruere eller tolke meldinger som bytesekvenser.
bytes er en uforanderlig sekvens, noe som betyr at du ikke kan endre innholdet etter opprettelse. Dette er ideelt når du må sikre at dataene forblir uendret, for eksempel ved lesing av en fil eller mottak av en nettverkspakke.
bytearray er foranderlig, så du kan endre innholdet direkte. Bruk bytearray når du trenger å bygge opp en melding, endre deler av en buffer, eller effektivt manipulere binærdata før sending eller lagring.
Når du skal bruke hver:
- Bruk
bytesfor faste, skrivebeskyttede binærdata, som filinnhold eller nettverksmeldinger du ikke trenger å endre; - Bruk
bytearraynår du må redigere, legge til eller på annen måte endre binærdata før videre behandling eller overføring.
Konvertering mellom bytes og bytearray
Du kan enkelt konvertere mellom bytes (uforanderlig) og bytearray (foranderlig) objekter i Python. Dette lar deg velge riktig type for ditt behov—bytes for faste data, bytearray når du må endre innholdet.
- Bruk
bytes()-konstruktøren for å gjøre enbytearrayom til et uforanderligbytes-objekt; - Bruk
bytearray()-konstruktøren for å lage en foranderlig kopi fra etbytes-objekt.
Dette er nyttig når du må redigere binærdata (med bytearray), og deretter låse det (med bytes) for sikker lagring eller overføring.
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)
Når du har konvertert til bytes, kan du ikke endre innholdet. Bruk bytearray når du må redigere binærdata før du gjør det endelig til bytes.
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")
Lengdeforskjeller
Noen tegn bruker ett teksttegn, men flere bytes, så lengden i str og i kodet form kan variere. Dette skjer fordi kodinger som UTF-8 kan bruke mer enn én byte for å representere et enkelt tegn.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Filer
Binære filer må åpnes i "rb"-modus slik at råbytes leses nøyaktig som lagret. Dette forhindrer at Python prøver å tolke dataene som tekst.
# with open("example.png", "rb") as f:
# blob = f.read()
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår