Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære None og Binære Data | Interaktioner på Tværs af Datatyper
Datatyper i Python

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".

1234567
result = 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.

123
value = 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.

1234567
x = 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.

1234567
def 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.

1234
b1 = 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.

123
text = "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 bytes til bytearray for at muliggøre ændringer:
b = b"data"
ba = bytearray(b)
  • Konverter bytearray tilbage til bytes for lagring eller overførsel:
ba = bytearray(b"abc")
b = bytes(ba)

Kodning og dekodning

  • Brug .encode() på en streng for at få et bytes-objekt med en bestemt kodning (som UTF-8);
  • Brug .decode() på et bytes- eller bytearray-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.
  • Netværksdata:
    • Socket-kommunikation sender og modtager data som bytes.
  • Binære protokoller:
    • Konstruer eller parse pakker ved hjælp af bytearray for effektiv redigering direkte i hukommelsen.

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 bytes til 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 en bytearray til et uforanderligt bytes-objekt;
  • Brug bytearray()-konstruktøren for at lave en foranderlig kopi fra et bytes-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'
123456
try: 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.

123
ch = "é" 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()
question mark

Hvilken kontrol opdager korrekt en manglende værdi?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

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".

1234567
result = 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.

123
value = 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.

1234567
x = 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.

1234567
def 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.

1234
b1 = 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.

123
text = "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 bytes til bytearray for at muliggøre ændringer:
b = b"data"
ba = bytearray(b)
  • Konverter bytearray tilbage til bytes for lagring eller overførsel:
ba = bytearray(b"abc")
b = bytes(ba)

Kodning og dekodning

  • Brug .encode() på en streng for at få et bytes-objekt med en bestemt kodning (som UTF-8);
  • Brug .decode() på et bytes- eller bytearray-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.
  • Netværksdata:
    • Socket-kommunikation sender og modtager data som bytes.
  • Binære protokoller:
    • Konstruer eller parse pakker ved hjælp af bytearray for effektiv redigering direkte i hukommelsen.

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 bytes til 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 en bytearray til et uforanderligt bytes-objekt;
  • Brug bytearray()-konstruktøren for at lave en foranderlig kopi fra et bytes-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'
123456
try: 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.

123
ch = "é" 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()
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 3
some-alt