我们正在编写一些 Python/C-API 代码,并且遇到了一个希望传递回调的方法。该方法将定期更新以反馈的形式发送到回调。事实证明,我们对定期反馈并不感兴趣。禁用该方法的默认反馈机制的唯一方法是向它传递某种回调。
我们采用的技术是声明一个只返回 None 的模块级函数,即:
static PyObject*
donothing(PyObject* self, PyObject* args) {
return Py_None;
}
但是当然,这个函数也需要在modules方法表中注册,即:
static PyMethodDef methods[] = {
{"donothing", donothing, METH_VARARGS, "do nothing"},
...
{NULL}
};
那么,当我们去调用该方法时,我们需要获取该方法的一个引用,即:PyObject_GetAttrString(module_reference, "donothing").
所有这一切感觉就像我们花太多时间转动我们的轮子只是为了无所事事。然后它发生在我身上..嘿,似乎是lambda x: None的完美用途。但是在使用 Python/C-API 文档花了一个小时之后,我无法弄清楚如何创建 lambdas。
我在http://docs.python.org/2/c-api/function.html页面上看到了对闭包的引用,但我无法整理出有关如何创建它们的详细信息。
任何指针(或对 RTFM 的引用)将不胜感激。