python - PyArg_ParseTuple 和回调函数指针

标签 python c callback python-c-extension

我有如下代码:

    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/

相关文章:

java - Android Kotlin 取消回调

java - 异步运行方法返回值到回调URL

c - Libev,如何将参数传递给相关回调

python - 在 BeautifulSoup 中正确获取 href 标签

python - 英特尔 MKL fatal error : Cannot load libmkl_mc3. so 或 libmkl_def.so

c - 开关盒 assembly 级代码

c - 错误 C3861 : 'ls_file' : identifier not found

c++ - 二维矩阵是指针数组吗?

python - 在 Pylons 中流式处理 POST 大请求

python - 如何只查看 pandas 数据框中的某些行?