PyArg_ParseTuple和一个回调函数指针

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回调,则每次都会产生不同的值,对吗?(由于地址每次都不同。)

Joh*_*hin 1

PyArg_ParseTuple不关心“O”参数的类型。不进行任何转换。没有创建新对象。对象的地址被放入PyObject *您指定的 C 变量中。它对两个参数的作用完全相同。

我无法想象 的相关性是什么PyObject_Hash。如果您想比较回调参数的两个形式,只需==在地址上使用即可。