to_bytes les octets de type en python 2.7 et PEP-358




python type() function (3)

Selon PEP 358 , un objet octets est utilisé pour stocker une séquence de bits modifiable (0-255), ce qui soulève le cas échéant.

Cependant, mon python 2.7 dit le contraire

>>> bytes([1,2,3])
'[1, 2, 3]'
>>> bytes([280])
'[280]'
>>> bytes is str
True
>>> bytes
<type 'str'>

Quelqu'un at-il une idée de la raison pour laquelle le PEP est déclaré final, mais l'implémentation n'est pas conforme?


bytes objets bytes n'existent vraiment que dans Python 3.x. bytes est un alias pour str dans Python 2.7. Il existe pour aider à écrire du code portable entre Python 2 et 3.


Le type d' bytes été introduit dans Python 3, mais ce qui est discuté dans le PEP est une séquence mutable (les bytes sont immuables) qui a été introduite dans Python 2.6 sous le nom de bytearray .

Le PEP n'a clairement pas été implémenté comme indiqué (et il est dit qu'il a été partiellement remplacé par le PEP 3137 ) mais je pense que ce n'est qu'une question de renommage, pas de fonctionnalités manquantes. En Python, 2 bytes est juste un alias pour que str facilite la compatibilité, tout comme le fait le rouge.

Exemple d'utilisation bytearray:

>>> a = bytearray([1,2,3])
>>> a[0] = 5
>>> a
bytearray(b'\x05\x02\x03')

Le nouveau type d' bytes est 3.x uniquement . Le 2.x bytes intégré est juste un alias du type str . Il n'y a pas de nouveau type appelé bytes dans 2.x; Juste un nouvel alias et une syntaxe littérale pour str .

Voici l' extrait de documentation que tout le monde aime:

Python 2.6 ajoute des bytes comme synonyme du type str et prend également en charge la notation b'' .

Le 2.6 str diffère du type d'octets de 3.0 de différentes manières; Plus particulièrement, le constructeur est complètement différent. En 3.0, les bytes([65, 66, 67]) 3 éléments de long, contenant les octets représentant ABC ; en 2.6, bytes([65, 66, 67]) renvoie la chaîne de 12 octets représentant le str() de la liste.

La principale utilisation des bytes en 2.6 consistera à écrire des tests de type objet tels que isinstance(x, bytes) . Cela aidera le convertisseur 2to3 , qui ne peut pas dire si le code 2.x a l'intention de contenir des caractères ou des octets de 8 bits. vous pouvez maintenant utiliser soit bytes ou str pour représenter votre intention exactement, et le code résultant sera également correct dans Python 3.0.





types