Python对象如何成为原始类型
我试图加快Python对象如何成为原始类型,python,cython,ctypes,pack,Python,Cython,Ctypes,Pack,我试图加快struct.pack(),感觉在从Python对象获取原始值的过程中缺少了一些基本的东西 假设我编写了速度最快的C/cython模块,它包含一个Python int列表- [1,14,78,-789…] 并将其打包到缓冲区中。然后假设我分别使用ctypes/cython从Python使用它 我仍然需要将一个Python列表传递给C模块,所以在那里的某个地方,Python已经有了原始形式的实际INT,每个INT有4个字节 所以当这些INT“命中”C模块时,我似乎已经完成了我要做的事情,
struct.pack()
,感觉在从Python对象获取原始值的过程中缺少了一些基本的东西
假设我编写了速度最快的C/cython模块,它包含一个Python int列表-
[1,14,78,-789…]
并将其打包到缓冲区中。然后假设我分别使用ctypes/cython从Python使用它
我仍然需要将一个Python列表传递给C模块,所以在那里的某个地方,Python已经有了原始形式的实际INT,每个INT有4个字节
所以当这些INT“命中”C模块时,我似乎已经完成了我要做的事情,只是我手中没有它
这种转换发生在哪里?我可以从纯Python插入到这个过程中吗?我知道
to_bytes()
,但它甚至比struct.pack()
还要慢,所以它不可能是这样。列表以指向a的指针的形式命中C代码,它不会被序列化为压缩的整数数组,我可以在任何地方自己寻址PyObject,从中提取int字节?我想你误解了CPython的工作原理,它一直是PyObject。“int”是28个字节,list
s只是指向这些对象的指针数组,所以我无法从Python中获取PyObject
的“内部”?即使使用类似于ast
模块或ctypes.py_object()
?ast
是语法,而不是内部表示。。。如果你不关心大整数,你可以使用numpy来为你序列化,它应该很快。不过,我建议在我的第一条评论中阅读链接