None og Binære Data
Stryg for at vise menuen
Reelle programmer håndterer manglende værdier og binære data. Brug None til at markere "ingen værdi", og bytes/bytearray til rå binært indhold. Kend hvornår hver type er passende, og hvordan man sikkert konverterer mellem tekst og bytes.
None til "Ingen værdi"
None er et enkelt objekt, der betyder "intet her".
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Brug is None i stedet for sandhedsværdikontrol, da 0 og "" også er falske værdier.
123value = 0 print(not value) # True print(value is None) # False
Standardværdier og fallback
None bruges som en tydelig markering af, at en værdi bevidst mangler. Det gør det muligt at skelne mellem "ingen værdi angivet" og gyldige værdier som 0 eller "", hvilket gør standardværdier og fallback mere sikre og forudsigelige.
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
Funktioner og parametre
Dette eksempel viser, hvordan en funktion bruger en parameter sat til None som et signal om, at der ikke blev angivet et tag. Det gør det muligt for funktionen at tildele en sikker standardværdi, samtidig med at den tillader, at kaldet kan tilsidesætte den efter 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 indeholder tekst, bytes og bytearray indeholder rå byteværdier.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Kodning og dekodning
Kodning konverterer tekst til bytes, så den kan lagres eller overføres pålideligt, mens dekodning gendanner disse bytes til læsbar tekst. Brug af en defineret kodning som UTF-8 sikrer, at tegn bevares korrekt.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Binære data i praksis
Brug bytes og bytearray til håndtering af rå binære oplysninger. Disse typer er essentielle til opgaver, hvor data ikke blot er tekst, såsom:
- Læsning og skrivning af filer i binær tilstand (som billeder, lyd eller eksekverbare filer);
- Afsendelse og modtagelse af data over netværk, hvor du skal overføre præcise byte-sekvenser;
- Parsning eller konstruktion af binære protokoller, for eksempel ved kommunikation med hardware eller lavniveau-API'er.
bytes vs bytearray
bytes-objekter er uforanderlige: du kan ikke ændre deres indhold efter oprettelse. Brug dem, når du har brug for faste binære data, såsom filindhold eller kryptografiske hashes;bytearray-objekter er foranderlige: du kan ændre deres indhold direkte. Dette er nyttigt til at opbygge eller redigere binære data, før de gemmes eller sendes.
Eksempel: Ændring af binære data
# 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 mellem bytes og bytearray
- Konverter
bytestilbytearrayfor at muliggøre ændringer:
b = b"data"
ba = bytearray(b)
- Konverter
bytearraytilbage tilbytesfor lagring eller overførsel:
ba = bytearray(b"abc")
b = bytes(ba)
Kodning og dekodning
- Brug
.encode()på en streng for at få etbytes-objekt med en bestemt kodning (som UTF-8); - Brug
.decode()på etbytes- ellerbytearray-objekt for at få en streng.
Dette er afgørende ved arbejde med fil-I/O eller netværksdata, hvor du ofte modtager eller sender rå bytes og skal konvertere dem til eller fra læsbar tekst.
Typiske anvendelser
- Fil-I/O:
- Åbn filer i binær tilstand (
"rb"eller"wb") for at læse eller skrive præcise bytes.
- Åbn filer i binær tilstand (
- Netværksdata:
- Socket-kommunikation sender og modtager data som bytes.
- Binære protokoller:
- Konstruer eller parse pakker ved hjælp af
bytearrayfor effektiv redigering direkte i hukommelsen.
- Konstruer eller parse pakker ved hjælp af
Forståelse af, hvornår du skal bruge hver type, hjælper dig med at skrive robust kode til håndtering af data i praksis.
Typiske anvendelser for Bytes og Bytearray
Du bruger bytes og bytearray når du arbejder direkte med rå binære data i stedet for tekst. Disse typer er essentielle i flere scenarier:
- Læsning eller skrivning af binære filer, såsom billeder, lyd eller eksekverbare filer;
- Håndtering af netværksdata, da sockets sender og modtager bytes, ikke strenge;
- Interaktion med binære protokoller, hvor du skal konstruere eller parse beskeder som sekvenser af bytes.
bytes er en uforanderlig sekvens, hvilket betyder, at du ikke kan ændre dens indhold efter oprettelse. Dette er ideelt, når du skal sikre, at data forbliver uændret, f.eks. ved læsning af en fil eller modtagelse af en netværkspakke.
bytearray er foranderlig, så du kan ændre dens indhold direkte. Brug bytearray, når du skal opbygge en besked, ændre dele af en buffer eller effektivt manipulere binære data, før de sendes eller gemmes.
Hvornår du skal bruge hver:
- Brug
bytestil faste, skrivebeskyttede binære data, som filindhold eller netværksbeskeder, du ikke skal ændre; - Brug
bytearray, når du skal redigere, tilføje eller på anden måde ændre de binære data før videre behandling eller overførsel.
Konvertering mellem bytes og bytearray
Du kan nemt konvertere mellem bytes (uforanderlig) og bytearray (foranderlig) objekter i Python. Dette giver dig mulighed for at vælge den rigtige type til dit behov—bytes til faste data, bytearray når du skal ændre indholdet.
- Brug
bytes()-konstruktøren for at omdanne enbytearraytil et uforanderligtbytes-objekt; - Brug
bytearray()-konstruktøren for at lave en foranderlig kopi fra etbytes-objekt.
Dette er nyttigt, når du skal redigere binære data (med bytearray), og derefter låse dem (med bytes) til sikker lagring eller overførsel.
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 konverteret til bytes, kan du ikke ændre indholdet. Brug bytearray, når du skal redigere binære data, før de endeligt gemmes som 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")
Længdeforskelle
Nogle tegn optager ét textelement, men flere bytes, så deres længde i str og i kodet form kan variere. Dette sker, fordi kodninger som UTF-8 kan bruge mere end én byte til at repræsentere et enkelt tegn.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Filer
Binære filer skal åbnes i "rb"-tilstand, så deres rå bytes læses præcist som de er gemt. Dette forhindrer Python i at forsøge at fortolke dataene som tekst.
# with open("example.png", "rb") as f:
# blob = f.read()
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
None og Binære Data
Reelle programmer håndterer manglende værdier og binære data. Brug None til at markere "ingen værdi", og bytes/bytearray til rå binært indhold. Kend hvornår hver type er passende, og hvordan man sikkert konverterer mellem tekst og bytes.
None til "Ingen værdi"
None er et enkelt objekt, der betyder "intet her".
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Brug is None i stedet for sandhedsværdikontrol, da 0 og "" også er falske værdier.
123value = 0 print(not value) # True print(value is None) # False
Standardværdier og fallback
None bruges som en tydelig markering af, at en værdi bevidst mangler. Det gør det muligt at skelne mellem "ingen værdi angivet" og gyldige værdier som 0 eller "", hvilket gør standardværdier og fallback mere sikre og forudsigelige.
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
Funktioner og parametre
Dette eksempel viser, hvordan en funktion bruger en parameter sat til None som et signal om, at der ikke blev angivet et tag. Det gør det muligt for funktionen at tildele en sikker standardværdi, samtidig med at den tillader, at kaldet kan tilsidesætte den efter 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 indeholder tekst, bytes og bytearray indeholder rå byteværdier.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Kodning og dekodning
Kodning konverterer tekst til bytes, så den kan lagres eller overføres pålideligt, mens dekodning gendanner disse bytes til læsbar tekst. Brug af en defineret kodning som UTF-8 sikrer, at tegn bevares korrekt.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Binære data i praksis
Brug bytes og bytearray til håndtering af rå binære oplysninger. Disse typer er essentielle til opgaver, hvor data ikke blot er tekst, såsom:
- Læsning og skrivning af filer i binær tilstand (som billeder, lyd eller eksekverbare filer);
- Afsendelse og modtagelse af data over netværk, hvor du skal overføre præcise byte-sekvenser;
- Parsning eller konstruktion af binære protokoller, for eksempel ved kommunikation med hardware eller lavniveau-API'er.
bytes vs bytearray
bytes-objekter er uforanderlige: du kan ikke ændre deres indhold efter oprettelse. Brug dem, når du har brug for faste binære data, såsom filindhold eller kryptografiske hashes;bytearray-objekter er foranderlige: du kan ændre deres indhold direkte. Dette er nyttigt til at opbygge eller redigere binære data, før de gemmes eller sendes.
Eksempel: Ændring af binære data
# 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 mellem bytes og bytearray
- Konverter
bytestilbytearrayfor at muliggøre ændringer:
b = b"data"
ba = bytearray(b)
- Konverter
bytearraytilbage tilbytesfor lagring eller overførsel:
ba = bytearray(b"abc")
b = bytes(ba)
Kodning og dekodning
- Brug
.encode()på en streng for at få etbytes-objekt med en bestemt kodning (som UTF-8); - Brug
.decode()på etbytes- ellerbytearray-objekt for at få en streng.
Dette er afgørende ved arbejde med fil-I/O eller netværksdata, hvor du ofte modtager eller sender rå bytes og skal konvertere dem til eller fra læsbar tekst.
Typiske anvendelser
- Fil-I/O:
- Åbn filer i binær tilstand (
"rb"eller"wb") for at læse eller skrive præcise bytes.
- Åbn filer i binær tilstand (
- Netværksdata:
- Socket-kommunikation sender og modtager data som bytes.
- Binære protokoller:
- Konstruer eller parse pakker ved hjælp af
bytearrayfor effektiv redigering direkte i hukommelsen.
- Konstruer eller parse pakker ved hjælp af
Forståelse af, hvornår du skal bruge hver type, hjælper dig med at skrive robust kode til håndtering af data i praksis.
Typiske anvendelser for Bytes og Bytearray
Du bruger bytes og bytearray når du arbejder direkte med rå binære data i stedet for tekst. Disse typer er essentielle i flere scenarier:
- Læsning eller skrivning af binære filer, såsom billeder, lyd eller eksekverbare filer;
- Håndtering af netværksdata, da sockets sender og modtager bytes, ikke strenge;
- Interaktion med binære protokoller, hvor du skal konstruere eller parse beskeder som sekvenser af bytes.
bytes er en uforanderlig sekvens, hvilket betyder, at du ikke kan ændre dens indhold efter oprettelse. Dette er ideelt, når du skal sikre, at data forbliver uændret, f.eks. ved læsning af en fil eller modtagelse af en netværkspakke.
bytearray er foranderlig, så du kan ændre dens indhold direkte. Brug bytearray, når du skal opbygge en besked, ændre dele af en buffer eller effektivt manipulere binære data, før de sendes eller gemmes.
Hvornår du skal bruge hver:
- Brug
bytestil faste, skrivebeskyttede binære data, som filindhold eller netværksbeskeder, du ikke skal ændre; - Brug
bytearray, når du skal redigere, tilføje eller på anden måde ændre de binære data før videre behandling eller overførsel.
Konvertering mellem bytes og bytearray
Du kan nemt konvertere mellem bytes (uforanderlig) og bytearray (foranderlig) objekter i Python. Dette giver dig mulighed for at vælge den rigtige type til dit behov—bytes til faste data, bytearray når du skal ændre indholdet.
- Brug
bytes()-konstruktøren for at omdanne enbytearraytil et uforanderligtbytes-objekt; - Brug
bytearray()-konstruktøren for at lave en foranderlig kopi fra etbytes-objekt.
Dette er nyttigt, når du skal redigere binære data (med bytearray), og derefter låse dem (med bytes) til sikker lagring eller overførsel.
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 konverteret til bytes, kan du ikke ændre indholdet. Brug bytearray, når du skal redigere binære data, før de endeligt gemmes som 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")
Længdeforskelle
Nogle tegn optager ét textelement, men flere bytes, så deres længde i str og i kodet form kan variere. Dette sker, fordi kodninger som UTF-8 kan bruge mere end én byte til at repræsentere et enkelt tegn.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Filer
Binære filer skal åbnes i "rb"-tilstand, så deres rå bytes læses præcist som de er gemt. Dette forhindrer Python i at forsøge at fortolke dataene som tekst.
# with open("example.png", "rb") as f:
# blob = f.read()
Tak for dine kommentarer!