Pourquoi n'est-il pas possible d'obtenir un Py_buffer à partir d'un objet tableau?
-
28-10-2019 - |
La solution
memoryview
ne fonctionne que sur les objets prenant en charge l'interface de tampon Python 3.array.array
en Python 3 le fait, mais pas en Python 2.7.Vous voudrez peut-être déposer un rapport de bogue pour cela.Utilisez simplement use bytearray
(ou str
si vous l'utilisez en lecture seule).Les deux supportent très bien memoryview
.
Autres conseils
Python 2.6+ a deux interfaces tampons différentes, tout comme il a deux types de classes différents: la version classique et la version Python 3.
Extrait du Manuel de référence de l'API Python / C :
Deux exemples d'objets prenant en charge l'interface tampon sont les chaînes et les tableaux. L’objet chaîne expose le contenu des caractères sous la forme orientée octets de l’interface de la mémoire tampon. Un tableau ne peut exposer son contenu que via l'interface de tampon à l'ancienne. Cette limitation ne s'applique pas à Python 3, où les objets memoryview peuvent également être construits à partir de tableaux.
Dans le code Python 2.7, vous pouvez travailler avec les tampons de l'ancien style en utilisant la fonction buffer
, et les tampons du nouveau style en utilisant memoryview
. Python 3 ne prend en charge que ce dernier.
Une distinction similaire existe dans l'API Python 2 C; PyObject_GetBuffer
est pour la nouvelle interface de tampon, PyBuffer_FromObject
/ PyBuffer_FromReadWriteObject
est pour l'ancienne interface de tampon (et devrait fonctionner pour les tableaux). Consultez le lien ci-dessus pour plus d'informations.