None- ja Binääritiedot
Todelliset ohjelmat käsittelevät puuttuvia arvoja sekä raakadataa tiedostoista tai verkoista. Käytä None-arvoa ilmaisemaan "ei arvoa", ja bytes- tai bytearray-tyyppejä binääridatalle. Tässä luvussa esitellään, milloin käyttää mitäkin ja miten siirtyä turvallisesti tekstin ja tavujen välillä.
None ilmaisee "ei arvoa"
None on yksittäinen erityisobjekti, joka tarkoittaa "ei mitään tässä".
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 on epätosi, mutta niin ovat myös 0 ja "". Suosi is None -tarkistusta, kun todella tarkoitat "puuttuvaa arvoa".
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
Oletusarvot ja vararatkaisut
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
Funktiot ja parametrit
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 ja bytearray binääridatalle
Tekstiä varten käytetään str-tyyppiä, joka sisältää Unicode-merkkejä. Binääridataa varten käytetään bytes- tai bytearray-tyyppiä, jotka sisältävät raakoja tavuarvoja 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'>
Tekstin ja tavujen muuntaminen: Encode ja 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'>
Tekstin ja tavujen yhdistäminen – ei sallittua ilman muunnosta
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'
Pituudet voivat vaihdella
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Tiedostot
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Mikä tarkistus havaitsee puuttuvan arvon oikein?
2. Mikä rivi yhdistää tekstin ja tavuprefiksin oikein?
3. Mikä väittämä on oikea?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 5
None- ja Binääritiedot
Pyyhkäise näyttääksesi valikon
Todelliset ohjelmat käsittelevät puuttuvia arvoja sekä raakadataa tiedostoista tai verkoista. Käytä None-arvoa ilmaisemaan "ei arvoa", ja bytes- tai bytearray-tyyppejä binääridatalle. Tässä luvussa esitellään, milloin käyttää mitäkin ja miten siirtyä turvallisesti tekstin ja tavujen välillä.
None ilmaisee "ei arvoa"
None on yksittäinen erityisobjekti, joka tarkoittaa "ei mitään tässä".
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 on epätosi, mutta niin ovat myös 0 ja "". Suosi is None -tarkistusta, kun todella tarkoitat "puuttuvaa arvoa".
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
Oletusarvot ja vararatkaisut
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
Funktiot ja parametrit
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 ja bytearray binääridatalle
Tekstiä varten käytetään str-tyyppiä, joka sisältää Unicode-merkkejä. Binääridataa varten käytetään bytes- tai bytearray-tyyppiä, jotka sisältävät raakoja tavuarvoja 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'>
Tekstin ja tavujen muuntaminen: Encode ja 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'>
Tekstin ja tavujen yhdistäminen – ei sallittua ilman muunnosta
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'
Pituudet voivat vaihdella
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Tiedostot
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Mikä tarkistus havaitsee puuttuvan arvon oikein?
2. Mikä rivi yhdistää tekstin ja tavuprefiksin oikein?
3. Mikä väittämä on oikea?
Kiitos palautteestasi!