Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Données None et Binaires | Interactions Entre Types
Types de Données en Python

Données None et Binaires

Glissez pour afficher le menu

Les programmes réels gèrent les valeurs manquantes et les données binaires. Utiliser None pour indiquer « aucune valeur », et bytes/bytearray pour le contenu binaire brut. Savoir quand chaque type est approprié et comment convertir en toute sécurité entre texte et octets.

None pour « aucune valeur »

None est un objet unique signifiant « rien ici ».

1234567
result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")

Utiliser is None au lieu de vérifications de véracité, car 0 et "" sont également considérés comme faux.

123
value = 0 print(not value) # True print(value is None) # False

Valeurs par défaut et solutions de repli

None est utilisé comme un indicateur clair qu'une valeur est intentionnellement absente. Cela permet de distinguer entre « aucune valeur fournie » et des valeurs valides comme 0 ou "", rendant l'utilisation de valeurs par défaut et de solutions de repli plus sûre et plus prévisible.

1234567
x = 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

Fonctions et paramètres

Cet exemple montre comment une fonction utilise un paramètre défini à None comme signal qu'aucun tag n'a été fourni. Cela permet à la fonction d'attribuer une valeur par défaut sûre tout en laissant l'appelant la remplacer si nécessaire.

1234567
def 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

Données binaires

str contient du texte, bytes et bytearray contiennent des valeurs d'octets brutes.

1234
b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65

Encodage et décodage

L'encodage convertit le texte en octets afin qu'il puisse être stocké ou transféré de manière fiable, tandis que le décodage restaure ces octets en texte lisible. L'utilisation d'un encodage défini comme UTF-8 garantit la préservation correcte des caractères.

123
text = "café" data = text.encode("utf-8") back = data.decode("utf-8")

Données binaires en pratique

Utiliser bytes et bytearray pour la gestion des informations binaires brutes. Ces types sont essentiels pour les tâches où les données ne sont pas uniquement du texte, telles que :

  • Lecture et écriture de fichiers en mode binaire (comme les images, fichiers audio ou exécutables) ;
  • Envoi et réception de données sur les réseaux, où il est nécessaire de transmettre des séquences d’octets précises ;
  • Analyse ou construction de protocoles binaires, par exemple lors de la communication avec du matériel ou des API bas niveau.

bytes vs bytearray

  • Les objets bytes sont immuables : leur contenu ne peut pas être modifié après création. À utiliser lorsque des données binaires fixes sont nécessaires, comme le contenu de fichiers ou des empreintes cryptographiques ;
  • Les objets bytearray sont muables : leur contenu peut être modifié sur place. Utile pour construire ou modifier des données binaires avant de les enregistrer ou de les envoyer.

Exemple : modification de données binaires

# 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')

Conversion entre bytes et bytearray

  • Convertir bytes en bytearray pour permettre les modifications :
b = b"data"
ba = bytearray(b)
  • Convertir bytearray en bytes pour le stockage ou la transmission :
ba = bytearray(b"abc")
b = bytes(ba)

Encodage et décodage

  • Utiliser .encode() sur une chaîne de caractères pour obtenir un objet bytes avec un encodage spécifique (comme UTF-8) ;
  • Utiliser .decode() sur un objet bytes ou bytearray pour obtenir une chaîne de caractères.

Ceci est crucial lors du travail avec des fichiers ou des données réseau, où il est fréquent de recevoir ou d’envoyer des octets bruts et de devoir les convertir en texte lisible ou inversement.

Cas d’utilisation typiques

  • Entrées/sorties de fichiers :
    • Ouvrir les fichiers en mode binaire ("rb" ou "wb") pour lire ou écrire des octets exacts.
  • Données réseau :
    • La communication via sockets envoie et reçoit des données sous forme d’octets.
  • Protocoles binaires :
    • Construire ou analyser des paquets en utilisant bytearray pour des modifications efficaces sur place.

Comprendre quand utiliser chaque type permet d’écrire du code robuste pour la gestion de données dans des situations réelles.

Cas d’utilisation typiques de Bytes et Bytearray

Utiliser bytes et bytearray lors du traitement direct de données binaires brutes, plutôt que du texte. Ces types sont essentiels dans plusieurs scénarios :

  • Lecture ou écriture de fichiers binaires, tels que des images, fichiers audio ou exécutables ;
  • Gestion de données réseau, car les sockets envoient et reçoivent des octets, et non des chaînes de caractères ;
  • Interaction avec des protocoles binaires, où il faut construire ou analyser des messages sous forme de séquences d’octets.

bytes est une séquence immuable, ce qui signifie que son contenu ne peut pas être modifié après création. Idéal pour garantir l’intégrité des données, par exemple lors de la lecture d’un fichier ou de la réception d’un paquet réseau.

bytearray est muable, permettant de modifier son contenu sur place. Utiliser bytearray pour construire un message, modifier une partie d’un tampon ou manipuler efficacement des données binaires avant de les envoyer ou de les enregistrer.

Quand utiliser chaque type :

  • Utiliser bytes pour des données binaires fixes et en lecture seule, comme le contenu de fichiers ou des messages réseau qui ne doivent pas être modifiés ;
  • Utiliser bytearray lorsque les données binaires doivent être modifiées, complétées ou manipulées avant un traitement ou une transmission ultérieure.

Conversion entre bytes et bytearray

Il est facile de convertir entre les objets bytes (immuables) et bytearray (muables) en Python. Cela permet de choisir le type adapté à chaque besoin—bytes pour des données fixes, bytearray lorsque le contenu doit être modifié.

  • Utiliser le constructeur bytes() pour transformer un bytearray en objet bytes immuable ;
  • Utiliser le constructeur bytearray() pour créer une copie muable à partir d’un objet bytes.

Ceci est utile lorsqu’il faut modifier des données binaires (avec bytearray), puis les verrouiller (avec bytes) pour un stockage ou une transmission sécurisée.

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)

Une fois converti en bytes, le contenu ne peut plus être modifié. Utiliser bytearray pour éditer les données binaires avant de les finaliser en tant que 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'
123456
try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")

Différences de longueur

Certains caractères occupent un élément texte mais plusieurs octets, donc leur longueur en str et sous forme encodée peut différer. Cela se produit parce que des encodages comme UTF-8 peuvent utiliser plus d'un octet pour représenter un seul caractère.

123
ch = "é" len(ch) # 1 len(ch.encode()) # 2

Fichiers

Les fichiers binaires doivent être ouverts en mode "rb" afin que leurs octets bruts soient lus exactement comme ils sont stockés. Cela empêche Python d'essayer d'interpréter les données comme du texte.

# with open("example.png", "rb") as f:
#     blob = f.read()
question mark

Quelle vérification détecte correctement une valeur manquante ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Données None et Binaires

Les programmes réels gèrent les valeurs manquantes et les données binaires. Utiliser None pour indiquer « aucune valeur », et bytes/bytearray pour le contenu binaire brut. Savoir quand chaque type est approprié et comment convertir en toute sécurité entre texte et octets.

None pour « aucune valeur »

None est un objet unique signifiant « rien ici ».

1234567
result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")

Utiliser is None au lieu de vérifications de véracité, car 0 et "" sont également considérés comme faux.

123
value = 0 print(not value) # True print(value is None) # False

Valeurs par défaut et solutions de repli

None est utilisé comme un indicateur clair qu'une valeur est intentionnellement absente. Cela permet de distinguer entre « aucune valeur fournie » et des valeurs valides comme 0 ou "", rendant l'utilisation de valeurs par défaut et de solutions de repli plus sûre et plus prévisible.

1234567
x = 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

Fonctions et paramètres

Cet exemple montre comment une fonction utilise un paramètre défini à None comme signal qu'aucun tag n'a été fourni. Cela permet à la fonction d'attribuer une valeur par défaut sûre tout en laissant l'appelant la remplacer si nécessaire.

1234567
def 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

Données binaires

str contient du texte, bytes et bytearray contiennent des valeurs d'octets brutes.

1234
b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65

Encodage et décodage

L'encodage convertit le texte en octets afin qu'il puisse être stocké ou transféré de manière fiable, tandis que le décodage restaure ces octets en texte lisible. L'utilisation d'un encodage défini comme UTF-8 garantit la préservation correcte des caractères.

123
text = "café" data = text.encode("utf-8") back = data.decode("utf-8")

Données binaires en pratique

Utiliser bytes et bytearray pour la gestion des informations binaires brutes. Ces types sont essentiels pour les tâches où les données ne sont pas uniquement du texte, telles que :

  • Lecture et écriture de fichiers en mode binaire (comme les images, fichiers audio ou exécutables) ;
  • Envoi et réception de données sur les réseaux, où il est nécessaire de transmettre des séquences d’octets précises ;
  • Analyse ou construction de protocoles binaires, par exemple lors de la communication avec du matériel ou des API bas niveau.

bytes vs bytearray

  • Les objets bytes sont immuables : leur contenu ne peut pas être modifié après création. À utiliser lorsque des données binaires fixes sont nécessaires, comme le contenu de fichiers ou des empreintes cryptographiques ;
  • Les objets bytearray sont muables : leur contenu peut être modifié sur place. Utile pour construire ou modifier des données binaires avant de les enregistrer ou de les envoyer.

Exemple : modification de données binaires

# 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')

Conversion entre bytes et bytearray

  • Convertir bytes en bytearray pour permettre les modifications :
b = b"data"
ba = bytearray(b)
  • Convertir bytearray en bytes pour le stockage ou la transmission :
ba = bytearray(b"abc")
b = bytes(ba)

Encodage et décodage

  • Utiliser .encode() sur une chaîne de caractères pour obtenir un objet bytes avec un encodage spécifique (comme UTF-8) ;
  • Utiliser .decode() sur un objet bytes ou bytearray pour obtenir une chaîne de caractères.

Ceci est crucial lors du travail avec des fichiers ou des données réseau, où il est fréquent de recevoir ou d’envoyer des octets bruts et de devoir les convertir en texte lisible ou inversement.

Cas d’utilisation typiques

  • Entrées/sorties de fichiers :
    • Ouvrir les fichiers en mode binaire ("rb" ou "wb") pour lire ou écrire des octets exacts.
  • Données réseau :
    • La communication via sockets envoie et reçoit des données sous forme d’octets.
  • Protocoles binaires :
    • Construire ou analyser des paquets en utilisant bytearray pour des modifications efficaces sur place.

Comprendre quand utiliser chaque type permet d’écrire du code robuste pour la gestion de données dans des situations réelles.

Cas d’utilisation typiques de Bytes et Bytearray

Utiliser bytes et bytearray lors du traitement direct de données binaires brutes, plutôt que du texte. Ces types sont essentiels dans plusieurs scénarios :

  • Lecture ou écriture de fichiers binaires, tels que des images, fichiers audio ou exécutables ;
  • Gestion de données réseau, car les sockets envoient et reçoivent des octets, et non des chaînes de caractères ;
  • Interaction avec des protocoles binaires, où il faut construire ou analyser des messages sous forme de séquences d’octets.

bytes est une séquence immuable, ce qui signifie que son contenu ne peut pas être modifié après création. Idéal pour garantir l’intégrité des données, par exemple lors de la lecture d’un fichier ou de la réception d’un paquet réseau.

bytearray est muable, permettant de modifier son contenu sur place. Utiliser bytearray pour construire un message, modifier une partie d’un tampon ou manipuler efficacement des données binaires avant de les envoyer ou de les enregistrer.

Quand utiliser chaque type :

  • Utiliser bytes pour des données binaires fixes et en lecture seule, comme le contenu de fichiers ou des messages réseau qui ne doivent pas être modifiés ;
  • Utiliser bytearray lorsque les données binaires doivent être modifiées, complétées ou manipulées avant un traitement ou une transmission ultérieure.

Conversion entre bytes et bytearray

Il est facile de convertir entre les objets bytes (immuables) et bytearray (muables) en Python. Cela permet de choisir le type adapté à chaque besoin—bytes pour des données fixes, bytearray lorsque le contenu doit être modifié.

  • Utiliser le constructeur bytes() pour transformer un bytearray en objet bytes immuable ;
  • Utiliser le constructeur bytearray() pour créer une copie muable à partir d’un objet bytes.

Ceci est utile lorsqu’il faut modifier des données binaires (avec bytearray), puis les verrouiller (avec bytes) pour un stockage ou une transmission sécurisée.

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)

Une fois converti en bytes, le contenu ne peut plus être modifié. Utiliser bytearray pour éditer les données binaires avant de les finaliser en tant que 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'
123456
try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")

Différences de longueur

Certains caractères occupent un élément texte mais plusieurs octets, donc leur longueur en str et sous forme encodée peut différer. Cela se produit parce que des encodages comme UTF-8 peuvent utiliser plus d'un octet pour représenter un seul caractère.

123
ch = "é" len(ch) # 1 len(ch.encode()) # 2

Fichiers

Les fichiers binaires doivent être ouverts en mode "rb" afin que leurs octets bruts soient lus exactement comme ils sont stockés. Cela empêche Python d'essayer d'interpréter les données comme du texte.

# with open("example.png", "rb") as f:
#     blob = f.read()
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3
some-alt