Données None et Binaires
Les programmes réels traitent souvent des valeurs manquantes et des données binaires brutes. Utiliser None pour représenter l'absence de valeur, et bytes ou bytearray pour gérer le contenu binaire provenant de fichiers ou de réseaux. Comprendre quand utiliser chaque type et comment convertir en toute sécurité entre texte et 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 souhaite réellement 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 - Non valide 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 handle default values when `0` or `""` are valid?
Can you show more examples of converting between text and bytes?
Génial!
Completion taux amélioré à 5.26
Données None et Binaires
Glissez pour afficher le menu
Les programmes réels traitent souvent des valeurs manquantes et des données binaires brutes. Utiliser None pour représenter l'absence de valeur, et bytes ou bytearray pour gérer le contenu binaire provenant de fichiers ou de réseaux. Comprendre quand utiliser chaque type et comment convertir en toute sécurité entre texte et 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 souhaite réellement 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 - Non valide 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 !