Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python对象如何成为原始类型_Python_Cython_Ctypes_Pack - Fatal编程技术网

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来为你序列化,它应该很快。不过,我建议在我的第一条评论中阅读链接