Données None et Binaires
Les programmes réels gèrent les valeurs manquantes et les données brutes provenant de fichiers ou de réseaux. Utiliser None pour représenter « aucune valeur », et bytes ou bytearray pour les données binaires. Ce chapitre explique quand utiliser chacun et comment passer en toute sécurité du texte aux octets.
None pour « aucune valeur »
None est un objet spécial unique qui signifie « rien ici ».
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 est une valeur fausse, mais 0 et "" le sont aussi. Préférer is None lorsque l’on veut vraiment signifier « valeur manquante ».
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
Valeurs par défaut et solutions de repli
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
Fonctions et paramètres
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 et bytearray pour les données binaires
Le texte utilise str et contient des caractères Unicode. Les données binaires utilisent bytes ou bytearray et contiennent des valeurs brutes d'octets de 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'>
Conversion entre texte et octets : Encoder et décoder
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'>
Mélange de texte et d'octets - Invalide sans conversion
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'
Les longueurs peuvent différer
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Fichiers
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Quelle vérification détecte correctement une valeur manquante ?
2. Quelle ligne combine correctement du texte avec un préfixe d'octets ?
3. Quelle affirmation est correcte ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
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
Données None et Binaires
Glissez pour afficher le menu
Les programmes réels gèrent les valeurs manquantes et les données brutes provenant de fichiers ou de réseaux. Utiliser None pour représenter « aucune valeur », et bytes ou bytearray pour les données binaires. Ce chapitre explique quand utiliser chacun et comment passer en toute sécurité du texte aux octets.
None pour « aucune valeur »
None est un objet spécial unique qui signifie « rien ici ».
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 est une valeur fausse, mais 0 et "" le sont aussi. Préférer is None lorsque l’on veut vraiment signifier « valeur manquante ».
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
Valeurs par défaut et solutions de repli
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
Fonctions et paramètres
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 et bytearray pour les données binaires
Le texte utilise str et contient des caractères Unicode. Les données binaires utilisent bytes ou bytearray et contiennent des valeurs brutes d'octets de 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'>
Conversion entre texte et octets : Encoder et décoder
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'>
Mélange de texte et d'octets - Invalide sans conversion
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'
Les longueurs peuvent différer
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Fichiers
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Quelle vérification détecte correctement une valeur manquante ?
2. Quelle ligne combine correctement du texte avec un préfixe d'octets ?
3. Quelle affirmation est correcte ?
Merci pour vos commentaires !