None och Binärdata
Riktiga program hanterar saknade värden och rådata från filer eller nätverk. Använd None för att representera "inget värde", och bytes eller bytearray för binärdata. Detta kapitel visar när du ska använda respektive typ och hur du säkert växlar mellan text och bytes.
None för "Inget värde"
None är ett särskilt objekt som betyder "inget här".
12345678910111213# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
None är falskt, men det är även 0 och "". Föredra is None när du verkligen menar "saknas".
123value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
Standardvärden och reservlösningar
1234567891011x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
Funktioner och parametrar
12345678910111213def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
bytes och bytearray för binärdata
Text använder str och innehåller Unicode-tecken. Binärdata använder bytes eller bytearray och innehåller råa bytevärden 0-255.
123456789# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
Konvertera text och bytes: Encode och Decode
1234567text = "café" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # café <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # café <class 'str'>
Blandning av text och bytes – ogiltigt utan konvertering
123456789# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
Längder kan variera
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Filer
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Vilken kontroll upptäcker korrekt ett saknat värde?
2. Vilken rad kombinerar korrekt text med ett bytes-prefix?
3. Vilket påstående är korrekt?
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
Can you explain when to use `None` versus other falsey values?
How do I safely provide default values for function parameters?
What are the main differences between `bytes` and `bytearray`?
Awesome!
Completion rate improved to 5
None och Binärdata
Svep för att visa menyn
Riktiga program hanterar saknade värden och rådata från filer eller nätverk. Använd None för att representera "inget värde", och bytes eller bytearray för binärdata. Detta kapitel visar när du ska använda respektive typ och hur du säkert växlar mellan text och bytes.
None för "Inget värde"
None är ett särskilt objekt som betyder "inget här".
12345678910111213# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
None är falskt, men det är även 0 och "". Föredra is None när du verkligen menar "saknas".
123value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
Standardvärden och reservlösningar
1234567891011x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
Funktioner och parametrar
12345678910111213def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
bytes och bytearray för binärdata
Text använder str och innehåller Unicode-tecken. Binärdata använder bytes eller bytearray och innehåller råa bytevärden 0-255.
123456789# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
Konvertera text och bytes: Encode och Decode
1234567text = "café" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # café <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # café <class 'str'>
Blandning av text och bytes – ogiltigt utan konvertering
123456789# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
Längder kan variera
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Filer
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Vilken kontroll upptäcker korrekt ett saknat värde?
2. Vilken rad kombinerar korrekt text med ett bytes-prefix?
3. Vilket påstående är korrekt?
Tack för dina kommentarer!