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 | Krysstypeinteraksjoner
Datatyper i Python

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

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

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

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

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.

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 inneholder tekst, bytes og bytearray inneholder rå byte-verdier.

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

123
text = "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 bytes til bytearray for å kunne gjøre endringer:
b = b"data"
ba = bytearray(b)
  • Konverter bytearray tilbake til bytes for lagring eller overføring:
ba = bytearray(b"abc")
b = bytes(ba)

Koding og dekoding

  • Bruk .encode() på en streng for å få et bytes-objekt med en spesifikk koding (som UTF-8);
  • Bruk .decode() på et bytes- eller bytearray-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.
  • Nettverksdata:
    • Socket-kommunikasjon sender og mottar data som bytes.
  • Binære protokoller:
    • Bygg eller parse pakker ved å bruke bytearray for effektiv redigering direkte i minnet.

Å 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 bytes for faste, skrivebeskyttede binærdata, som filinnhold eller nettverksmeldinger du ikke trenger å endre;
  • Bruk bytearray nå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 en bytearray om til et uforanderlig bytes-objekt;
  • Bruk bytearray()-konstruktøren for å lage en foranderlig kopi fra et bytes-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'
123456
try: 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.

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

Hvilken sjekk oppdager korrekt en manglende verdi?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 4. Kapittel 3
some-alt