我有如下代码:
PyObject *callback;
PyObject *paths;
// Process and convert arguments
if (!PyArg_ParseTuple(args, "OO:schedule", &paths, &callback))
return NULL;
PyArg_ParseTuple 内部到底发生了什么?我的猜测是回调获取我传递给 args(也是 PyObject*)的函数指针。 PyArg_ParseTuple 如何将函数指针转换为 PyObject*?
我想知道的是如果我两次传入同一个回调函数指针会发生什么。我认为回调在 PyArg_ParseTuple 中分配了一个新的 PyObject,因此每次都会获得不同的内存地址,但将包含相同的回调函数指针。
但是如果我 PyObject_Hash 回调,它每次都会产生不同的值,对吗? (因为地址每次都不同..)
最佳答案
PyArg_ParseTuple
不关心“O”arg 的类型。没有转换完成。没有创建新对象。对象的地址被放入您指定的 PyObject *
C 变量中。它对您的两个参数中的每一个都完全相同。
我无法想象PyObject_Hash
有什么相关性。如果您想比较回调 arg 的两个化身,只需在地址上使用 ==
。
关于python - PyArg_ParseTuple 和回调函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3532434/