Pau*_*aul 5 c python callback python-c-extension
我有如下代码:
PyObject *callback;
PyObject *paths;
// Process and convert arguments
if (!PyArg_ParseTuple(args, "OO:schedule", &paths, &callback))
return NULL;
Run Code Online (Sandbox Code Playgroud)
PyArg_ParseTuple内部到底发生了什么?我的猜测是,回调函数获取了我传递给args的函数指针(也是PyObject *)。PyArg_ParseTuple如何将函数指针转换为PyObject *?
我想知道的是,如果我两次传入相同的回调函数指针,将会发生什么。我认为回调在PyArg_ParseTuple内分配了一个新的PyObject,因此每次都会获得不同的内存地址,但是将包含相同的回调函数指针。
但是,如果我使用PyObject_Hash回调,则每次都会产生不同的值,对吗?(由于地址每次都不同。)
PyArg_ParseTuple不关心“O”参数的类型。不进行任何转换。没有创建新对象。对象的地址被放入PyObject *您指定的 C 变量中。它对两个参数的作用完全相同。
我无法想象 的相关性是什么PyObject_Hash。如果您想比较回调参数的两个形式,只需==在地址上使用即可。