Si vous regardez les documents bytes
, cela vous indique bytearray
:
bytearray ([source [, encodage [, erreurs]]])
Renvoie un nouveau tableau d'octets. Le type bytearray est une séquence mutable d'entiers dans la plage 0 <= x <256. Il possède la plupart des méthodes habituelles de séquences mutables, décrites dans Mutable Sequence Types, ainsi que la plupart des méthodes du type bytes, voir Octets et Méthodes de tableau d'octets.
Le paramètre source facultatif peut être utilisé pour initialiser le tableau de différentes manières:
S'il s'agit d'une chaîne, vous devez également donner les paramètres d'encodage (et éventuellement des erreurs); bytearray () convertit ensuite la chaîne en octets à l'aide de str.encode ().
S'il s'agit d'un entier, le tableau aura cette taille et sera initialisé avec des octets nuls.
S'il s'agit d'un objet conforme à l'interface du tampon, un tampon en lecture seule de l'objet sera utilisé pour initialiser le tableau d'octets.
S'il s'agit d'un itérable, il doit s'agir d'un itérable d'entiers compris dans la plage 0 <= x <256, qui sont utilisés comme contenu initial du tableau.
Sans argument, un tableau de taille 0 est créé.
bytes
Peut donc faire bien plus que simplement coder une chaîne. C'est Pythonic qu'il vous permettrait d'appeler le constructeur avec n'importe quel type de paramètre source qui a du sens.
Pour encoder une chaîne, je pense que some_string.encode(encoding)
c'est plus Pythonic que d'utiliser le constructeur, parce que c'est la plus auto-documentée - "prenez cette chaîne et encodez-la avec cet encodage" est plus clair quebytes(some_string, encoding)
- il n'y a pas de verbe explicite lorsque vous utilisez le constructeur.
Edit: j'ai vérifié la source Python. Si vous passez une chaîne unicode à l' bytes
utilisation de CPython, il appelle PyUnicode_AsEncodedString , qui est l'implémentation de encode
; donc vous sautez juste un niveau d'indirection si vous vous appelez encode
.
Voir aussi le commentaire de Serdalis - unicode_string.encode(encoding)
est également plus Pythonic car son inverse est byte_string.decode(encoding)
et la symétrie est agréable.