None och Binärdata
Svep för att visa menyn
Riktiga program hanterar saknade värden och binär data. Använd None för att markera "inget värde", och bytes/bytearray för rå binärdata. Känn till när varje typ är lämplig och hur du säkert konverterar mellan text och bytes.
None för "Inget värde"
None är ett enda objekt som betyder "inget här".
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Använd is None istället för sanningsvärdeskontroller, eftersom 0 och "" också är falska.
123value = 0 print(not value) # True print(value is None) # False
Standardvärden och reservvärden
None används som en tydlig markering för att ett värde medvetet saknas. Det gör det möjligt att skilja mellan "inget värde angivet" och giltiga värden som 0 eller "", vilket gör standardvärden och reservvärden säkrare och mer förutsägbara.
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 och parametrar
Detta exempel visar hur en funktion använder en parameter satt till None som en signal om att ingen tagg angavs. Det gör att funktionen kan tilldela ett säkert standardvärde samtidigt som anroparen kan åsidosätta det vid 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ärdata
str innehåller text, bytes och bytearray innehåller råa bytevärden.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Kodning och avkodning
Kodning omvandlar text till byte så att den kan lagras eller överföras på ett tillförlitligt sätt, medan avkodning återställer dessa byte till läsbar text. Genom att använda en definierad kodning som UTF-8 säkerställs att tecken bevaras korrekt.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Binärdata i praktiken
Använd bytes och bytearray för att hantera rå binärinformation. Dessa typer är avgörande för uppgifter där data inte bara är text, såsom:
- Läsa och skriva filer i binärt läge (till exempel bilder, ljud eller körbara filer);
- Skicka och ta emot data över nätverk, där du måste överföra exakta byte-sekvenser;
- Tolka eller konstruera binära protokoll, till exempel vid kommunikation med hårdvara eller lågnivå-API:er.
bytes vs bytearray
bytes-objekt är oföränderliga: du kan inte ändra deras innehåll efter skapandet. Använd dem när du behöver fast binärdata, såsom filinnehåll eller kryptografiska hashvärden;bytearray-objekt är föränderliga: du kan ändra deras innehåll direkt. Detta är användbart för att bygga eller redigera binärdata innan du sparar eller skickar den.
Exempel: Modifiera 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')
Konvertera mellan bytes och bytearray
- Konvertera
bytestillbytearrayför att möjliggöra ändringar:
b = b"data"
ba = bytearray(b)
- Konvertera
bytearraytillbaka tillbytesför lagring eller överföring:
ba = bytearray(b"abc")
b = bytes(ba)
Kodning och avkodning
- Använd
.encode()på en sträng för att få ettbytes-objekt med en specifik kodning (till exempel UTF-8); - Använd
.decode()på ettbytes- ellerbytearray-objekt för att få en sträng.
Detta är avgörande vid arbete med fil-I/O eller nätverksdata, där du ofta tar emot eller skickar råa bytes och behöver konvertera dem till eller från läsbar text.
Typiska användningsområden
- Fil-I/O:
- Öppna filer i binärt läge (
"rb"eller"wb") för att läsa eller skriva exakta bytes.
- Öppna filer i binärt läge (
- Nätverksdata:
- Socket-kommunikation skickar och tar emot data som bytes.
- Binära protokoll:
- Bygg eller tolka paket med
bytearrayför effektiva ändringar direkt i minnet.
- Bygg eller tolka paket med
Att förstå när du ska använda varje typ hjälper dig att skriva robust kod för hantering av verklig data.
Typiska användningsområden för Bytes och Bytearray
Du använder bytes och bytearray när du arbetar direkt med rå binärdata, istället för text. Dessa typer är nödvändiga i flera scenarier:
- Läsa eller skriva binära filer, såsom bilder, ljud eller körbara filer;
- Hantera nätverksdata, eftersom sockets skickar och tar emot bytes, inte strängar;
- Interagera med binära protokoll, där du måste konstruera eller tolka meddelanden som sekvenser av bytes.
bytes är en oföränderlig sekvens, vilket innebär att du inte kan ändra dess innehåll efter skapandet. Detta är idealiskt när du behöver säkerställa att data förblir oförändrad, till exempel vid läsning av en fil eller mottagning av ett nätverkspaket.
bytearray är förändringsbar, så du kan ändra dess innehåll direkt. Använd bytearray när du behöver bygga upp ett meddelande, ändra delar av en buffert eller effektivt manipulera binärdata innan du skickar eller sparar den.
När du ska använda varje:
- Använd
bytesför fast, skrivskyddad binärdata, som filinnehåll eller nätverksmeddelanden du inte behöver ändra; - Använd
bytearraynär du behöver redigera, lägga till eller på annat sätt ändra binärdata innan vidare bearbetning eller överföring.
Konvertera mellan bytes och bytearray
Du kan enkelt konvertera mellan bytes (oföränderlig) och bytearray (förändringsbar) objekt i Python. Detta låter dig välja rätt typ för dina behov—bytes för fast data, bytearray när du behöver ändra innehållet.
- Använd konstruktorn
bytes()för att omvandla enbytearraytill ett oföränderligtbytes-objekt; - Använd konstruktorn
bytearray()för att skapa en förändringsbar kopia från ettbytes-objekt.
Detta är användbart när du behöver redigera binärdata (med bytearray), och sedan låsa den (med bytes) för säker lagring eller överfö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 väl har konverterat till bytes kan du inte ändra innehållet. Använd bytearray när du behöver redigera binärdata innan du slutligen gör den till 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")
Skillnader i längd
Vissa tecken tar ett textelement men flera byte, så deras längd i str och i kodad form kan skilja sig. Detta sker eftersom kodningar som UTF-8 kan använda mer än en byte för att representera ett enda tecken.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Filer
Binära filer måste öppnas i "rb"-läge så att deras råa byte läses exakt som de är lagrade. Detta förhindrar att Python försöker tolka data som text.
# with open("example.png", "rb") as f:
# blob = f.read()
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
None och Binärdata
Riktiga program hanterar saknade värden och binär data. Använd None för att markera "inget värde", och bytes/bytearray för rå binärdata. Känn till när varje typ är lämplig och hur du säkert konverterar mellan text och bytes.
None för "Inget värde"
None är ett enda objekt som betyder "inget här".
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Använd is None istället för sanningsvärdeskontroller, eftersom 0 och "" också är falska.
123value = 0 print(not value) # True print(value is None) # False
Standardvärden och reservvärden
None används som en tydlig markering för att ett värde medvetet saknas. Det gör det möjligt att skilja mellan "inget värde angivet" och giltiga värden som 0 eller "", vilket gör standardvärden och reservvärden säkrare och mer förutsägbara.
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 och parametrar
Detta exempel visar hur en funktion använder en parameter satt till None som en signal om att ingen tagg angavs. Det gör att funktionen kan tilldela ett säkert standardvärde samtidigt som anroparen kan åsidosätta det vid 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ärdata
str innehåller text, bytes och bytearray innehåller råa bytevärden.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Kodning och avkodning
Kodning omvandlar text till byte så att den kan lagras eller överföras på ett tillförlitligt sätt, medan avkodning återställer dessa byte till läsbar text. Genom att använda en definierad kodning som UTF-8 säkerställs att tecken bevaras korrekt.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Binärdata i praktiken
Använd bytes och bytearray för att hantera rå binärinformation. Dessa typer är avgörande för uppgifter där data inte bara är text, såsom:
- Läsa och skriva filer i binärt läge (till exempel bilder, ljud eller körbara filer);
- Skicka och ta emot data över nätverk, där du måste överföra exakta byte-sekvenser;
- Tolka eller konstruera binära protokoll, till exempel vid kommunikation med hårdvara eller lågnivå-API:er.
bytes vs bytearray
bytes-objekt är oföränderliga: du kan inte ändra deras innehåll efter skapandet. Använd dem när du behöver fast binärdata, såsom filinnehåll eller kryptografiska hashvärden;bytearray-objekt är föränderliga: du kan ändra deras innehåll direkt. Detta är användbart för att bygga eller redigera binärdata innan du sparar eller skickar den.
Exempel: Modifiera 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')
Konvertera mellan bytes och bytearray
- Konvertera
bytestillbytearrayför att möjliggöra ändringar:
b = b"data"
ba = bytearray(b)
- Konvertera
bytearraytillbaka tillbytesför lagring eller överföring:
ba = bytearray(b"abc")
b = bytes(ba)
Kodning och avkodning
- Använd
.encode()på en sträng för att få ettbytes-objekt med en specifik kodning (till exempel UTF-8); - Använd
.decode()på ettbytes- ellerbytearray-objekt för att få en sträng.
Detta är avgörande vid arbete med fil-I/O eller nätverksdata, där du ofta tar emot eller skickar råa bytes och behöver konvertera dem till eller från läsbar text.
Typiska användningsområden
- Fil-I/O:
- Öppna filer i binärt läge (
"rb"eller"wb") för att läsa eller skriva exakta bytes.
- Öppna filer i binärt läge (
- Nätverksdata:
- Socket-kommunikation skickar och tar emot data som bytes.
- Binära protokoll:
- Bygg eller tolka paket med
bytearrayför effektiva ändringar direkt i minnet.
- Bygg eller tolka paket med
Att förstå när du ska använda varje typ hjälper dig att skriva robust kod för hantering av verklig data.
Typiska användningsområden för Bytes och Bytearray
Du använder bytes och bytearray när du arbetar direkt med rå binärdata, istället för text. Dessa typer är nödvändiga i flera scenarier:
- Läsa eller skriva binära filer, såsom bilder, ljud eller körbara filer;
- Hantera nätverksdata, eftersom sockets skickar och tar emot bytes, inte strängar;
- Interagera med binära protokoll, där du måste konstruera eller tolka meddelanden som sekvenser av bytes.
bytes är en oföränderlig sekvens, vilket innebär att du inte kan ändra dess innehåll efter skapandet. Detta är idealiskt när du behöver säkerställa att data förblir oförändrad, till exempel vid läsning av en fil eller mottagning av ett nätverkspaket.
bytearray är förändringsbar, så du kan ändra dess innehåll direkt. Använd bytearray när du behöver bygga upp ett meddelande, ändra delar av en buffert eller effektivt manipulera binärdata innan du skickar eller sparar den.
När du ska använda varje:
- Använd
bytesför fast, skrivskyddad binärdata, som filinnehåll eller nätverksmeddelanden du inte behöver ändra; - Använd
bytearraynär du behöver redigera, lägga till eller på annat sätt ändra binärdata innan vidare bearbetning eller överföring.
Konvertera mellan bytes och bytearray
Du kan enkelt konvertera mellan bytes (oföränderlig) och bytearray (förändringsbar) objekt i Python. Detta låter dig välja rätt typ för dina behov—bytes för fast data, bytearray när du behöver ändra innehållet.
- Använd konstruktorn
bytes()för att omvandla enbytearraytill ett oföränderligtbytes-objekt; - Använd konstruktorn
bytearray()för att skapa en förändringsbar kopia från ettbytes-objekt.
Detta är användbart när du behöver redigera binärdata (med bytearray), och sedan låsa den (med bytes) för säker lagring eller överfö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 väl har konverterat till bytes kan du inte ändra innehållet. Använd bytearray när du behöver redigera binärdata innan du slutligen gör den till 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")
Skillnader i längd
Vissa tecken tar ett textelement men flera byte, så deras längd i str och i kodad form kan skilja sig. Detta sker eftersom kodningar som UTF-8 kan använda mer än en byte för att representera ett enda tecken.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Filer
Binära filer måste öppnas i "rb"-läge så att deras råa byte läses exakt som de är lagrade. Detta förhindrar att Python försöker tolka data som text.
# with open("example.png", "rb") as f:
# blob = f.read()
Tack för dina kommentarer!